0

假设我有同一个应用程序的两个实例与 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?

4

2 回答 2

1

您已经在使用对话组。接收消息时,这还不足以满足您的需求吗?-> 一起使用 GET CONVERSATION GROUP 和 RECEIVE,您可以在此处阅读更多相关信息:http ://technet.microsoft.com/en-us/library/ms166131%28v=sql.105%29.aspx 以及此处的Sql Server Service经纪人对话组

于 2013-11-09T18:46:51.500 回答
0

我假设您InitQueue与您的InitService. 您可以使用WHEREwith 子句RECEIVE来收听同一对话中的消息:

WAITFOR (RECEIVE @response = CONVERT(xml, message_body)
    FROM InitQueue -- InitService setup to use InitQueue?
    WHERE conversation_handle = @Conversation1
于 2017-09-19T06:33:15.257 回答