假设我有两个同一个应用程序与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?
答案 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)
我假设您InitQueue
与InitService
相关联。您可以将WHERE
子句与RECEIVE
一起使用来侦听同一对话中的消息:
WAITFOR (RECEIVE @response = CONVERT(xml, message_body)
FROM InitQueue -- InitService setup to use InitQueue?
WHERE conversation_handle = @Conversation1