SQL队列服务代理应用程序

时间:2014-02-19 02:02:15

标签: sql sql-server-2008 message-queue service-broker

我正在设计一个将从SQL队列中读取消息的应用程序。这是一项要求。我必须使用他们的队列。问题是如何读取他们的队列。我想像MSMQ一样使用它,但它看起来不可能。我需要一次读取一个FIFO顺序的消息。要一次读一个,我必须使每个消息成为一个对话,但它们不一定按FIFO顺序。我可以使用一个永无止境的对话来维持秩序,但我相信我必须阅读队列中的所有内容。不只是一条消息。有没有人构建一个应用程序来执行我需要它的方式?这不可能吗?还有其他建议吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

  

从SQL队列中读取消息。这是一个要求......我想像MSMQ一样使用它,但它看起来不太可能。我需要一次一个地按FIFO顺序读取消息。

我的建议是不要试图在圆孔中安装方形钉。如果要求使用Service Broker,那么不要试图适应您的编程模型。教育自己一点关于Service Broker编程,并尝试设计一些利用SSB优势的东西。在你向前推进之前阅读这些链接:

来吧,我等一下......

我希望现在很明显有一种方法可以做你最初提出的问题:SSB在会话中提供正确的一次交付,这样你就可以实现FIFO 通过单个会话发送所有消息。 SSB还允许您使用RECEIVE TOP(1) ... FROM ...将出列限制为仅一条消息。将这两者结合起来就可以得到你所要求的。

但这不是SSB应用程序的设计方式。实际上没有理由将出列限制为单个消息,您应该将批次出列并循环处理批处理。保持一个交易,结果与一次一个地出列无法区分。接下来,FIFO要求只有在会话中才有意义,只要你有多个发送者FIFO不存在,作为一个基本概念(当多个发件人同时发送消息时'首先'意味着什么?'先''命中目标队列,在随机网络轮盘?)。您可以通过消息到达的顺序出现来获得FIFO的错觉,实际上SSB就是这样做的。一旦考虑并发处理,天真的“全局FIFO”概念就会崩溃。抛弃回滚并重试为香料。