【问题标题】:Multiple conversations on Service BrokerService Broker 上的多个对话
【发布时间】:2013-11-09 13:22:18
【问题描述】:

假设我有两个与 Service Broker 中的后端服务交互的应用程序实例。每个实例如何知道只处理它发起的对话而忽略其余的?如果我没记错的话,每个 RECEIVE 都会从队列中删除消息。

这是一个例子:

-- Assume the SquareService return the square of the number sent to it

-- Instance 1
BEGIN DIALOG @Conversation1
    FROM SERVICE InitService
    TO SERVICE 'SquareService'
    ON CONTRACT (MyContract)
    WITH ENCRYPTION = OFF;

    SEND ON CONVERSATION @Conversation1 MESSAGE TYPE MyMessageType('1');

-- Instance 2
BEGIN DIALOG @Conversation2
    ...;
    SEND ON CONVERSATION @Conversation2 MESSAGE TYPE MyMessageType('2');

现在我应该向谁编写RECEIVE 语句,以便实例 1 正确获取 1 而实例 2 获取 4?

【问题讨论】:

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


    【解决方案1】:

    您已经在使用对话组。 接收消息时,这是否不足以满足您的需求? -> 一起使用 GET CONVERSATION GROUP 和 RECEIVE 你可以在这里阅读更多信息:http://technet.microsoft.com/en-us/library/ms166131%28v=sql.105%29.aspx 还有这里Sql Server Service Broker Conversation Groups

    【讨论】:

    • 感谢您的回答并满分。微软文档在这个话题上太差了,我什至不知道CONVERSATION GROUP 是干什么用的。
    【解决方案2】:

    我假设您有一个与您的InitService 关联的InitQueue。您可以使用带有RECEIVEWHERE 子句来收听同一对话中的消息:

    WAITFOR (RECEIVE @response = CONVERT(xml, message_body)
        FROM InitQueue -- InitService setup to use InitQueue?
        WHERE conversation_handle = @Conversation1
    

    【讨论】:

      猜你喜欢
      • 2010-11-21
      • 2013-09-07
      • 1970-01-01
      • 2014-11-14
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      相关资源
      最近更新 更多