Sql server 2008 使用SQL 2008 ServiceBroker实现大容量线程安全FIFO队列

Sql server 2008 使用SQL 2008 ServiceBroker实现大容量线程安全FIFO队列,sql-server-2008,service-broker,Sql Server 2008,Service Broker,我刚刚开始评估ServiceBroker,以确定它是否可以在非常特定的上下文中作为可靠的队列执行。以下是场景: 我需要预先计算数百万个计算昂贵的值并存储在队列中 2多个进程将根据需要在运行时尝试读取/排出这些值。每秒可能有几百次以上的读取 3监视进程偶尔会轮询队列并确定是否已达到人口最小阈值,然后重新填充队列 由于一些基础设施/成本限制,行业实力队列websphere可能不是一个选项。到目前为止,我所看到的ServiceBroker并不令人鼓舞,因为它似乎与两个端点的对话隔离,在我的场景中,我的

我刚刚开始评估ServiceBroker,以确定它是否可以在非常特定的上下文中作为可靠的队列执行。以下是场景:

我需要预先计算数百万个计算昂贵的值并存储在队列中

2多个进程将根据需要在运行时尝试读取/排出这些值。每秒可能有几百次以上的读取

3监视进程偶尔会轮询队列并确定是否已达到人口最小阈值,然后重新填充队列


由于一些基础设施/成本限制,行业实力队列websphere可能不是一个选项。到目前为止,我所看到的ServiceBroker并不令人鼓舞,因为它似乎与两个端点的对话隔离,在我的场景中,我的读操作完全独立于写操作。有人对SQL Service Broker是否可以做到这一点有什么见解吗?

虽然Service Broker并不是为这种情况而设计的,但我认为稍加调整,它就可以在您的情况下工作

一种方法是预先创建一个会话池,然后在存储值时让计算过程在这些会话之间进行循环。由于从队列接收会锁定会话,因此会话的数量本质上设置了一个上限,即有多少进程可以并发地将值出列。我不确定这一点,但您可能需要接收方的一些逻辑来明确地告诉您要从哪个会话接收,以便实现比默认接收行为更好的负载平衡

如果性能不是一个问题,那么您甚至可以放弃对话池的想法,在一个单独的对话框中发送每条消息,这将使实现方式更简单,但代价是显著的性能影响

以上所述假设值可能以随机顺序出列,否则您需要通过使用单个对话来保证接收顺序