Service Broker上的多个对话

时间:2013-11-09 13:22:18

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

假设我有两个同一个应用程序与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语句,以便Instance 1正确获取1而实例2返回4?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我假设您InitQueueInitService相关联。您可以将WHERE子句与RECEIVE一起使用来侦听同一对话中的消息:

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