Sql ServiceBroker上的多个对话
假设我有两个同一应用程序的实例与ServiceBroker中的后端服务交互。每个实例如何知道只处理它发起的对话而忽略其余对话?如果我没有记错,每次接收都会从队列中删除消息 下面是一个例子:Sql ServiceBroker上的多个对话,sql,sql-server,sql-server-2008,service-broker,Sql,Sql Server,Sql Server 2008,Service Broker,假设我有两个同一应用程序的实例与ServiceBroker中的后端服务交互。每个实例如何知道只处理它发起的对话而忽略其余对话?如果我没有记错,每次接收都会从队列中删除消息 下面是一个例子: -- Assume the SquareService return the square of the number sent to it -- Instance 1 BEGIN DIALOG @Conversation1 FROM SERVICE InitService TO SERVI
-- 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?您已经在使用一个对话组。
这是否不足以满足您在接收信息时的需要?
->使用GET对话组和RECEIVE
您可以在此处阅读更多信息:
在这里我假设您有一个与您的
InitService
关联的InitQueue
。您可以将WHERE
子句与RECEIVE
一起使用,以侦听同一对话中的消息:
WAITFOR (RECEIVE @response = CONVERT(xml, message_body)
FROM InitQueue -- InitService setup to use InitQueue?
WHERE conversation_handle = @Conversation1
谢谢你的回答,满分。Microsoft文档在这个主题上太差了,以至于我甚至不知道
对话组是用来做什么的。