【问题标题】:Conversations in Sql Server Service BrokerSql Server Service Broker 中的对话
【发布时间】:2013-09-07 07:40:42
【问题描述】:

据我了解,会话将按顺序发送到一个会话。

但是,如果我有一个会话可以获取会话的所有消息,然后在处理它们的同时添加更多消息。

会话结束并发送结束对话,但队列中还有更多,因此发起者不会发送结束对话。

收到第一条消息的会话已完成/已结束/不再。 Service Broker 将如何处理其他消息?他们是否超时然后去另一个会话?

它是否等待具有第一条消息的会话的结束对话? (如果不是如何保证正确的顺序?)

或者(最坏的情况)这些消息从未被处理?

我厌倦了自己通过观察来弄清楚这一点,但结果很模棱两可,我希望知道的人回答一下。

【问题讨论】:

    标签: sql-server sql-server-2012 service-broker


    【解决方案1】:

    发送 EndDialog 消息时,Service Broker 确保队列中的所有待处理消息都在 EndDialog 之前发送。 无法在该对话中发送更多消息,但仍可以在目的地处理消息。

    在接收端,处理器应该继续查找消息,直到它看到 EndDialog 消息 - 一旦它看到它可以在其结束时关闭对话,因为它知道该对话不能再有消息了。

    【讨论】:

    • 如果会话中的部分消息被拉取,然后该会话不再检查更多消息,该怎么办。该会话中的其余消息最终会开放给其他进程获取吗?这是如何控制的(是否有超时)?
    • 这取决于您的激活设置。如果您使用的是内部激活 - 如果 SSSB 在队列中看到尚未处理的消息(并且不是锁定会话组的一部分),那么它将启动队列读取器过程的实例(受 MAX_QUEUE_READER 限制)。
    猜你喜欢
    • 2010-11-21
    • 2012-08-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 2014-03-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多