![](/img/trans.png)
[英]SQL Server Service Broker For Distributed App With Conversations Stucking in State of Conversing
[英]Multiple conversations on 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
语句,以便实例1正确地获得1,而实例2正确地获得4?
您已经在使用会话组。 接收消息时,这不足以满足您的需求吗? ->一起使用GET CONVERSATION GROUP和RECEIVE,您可以在此处了解更多信息: http : //technet.microsoft.com/zh-cn/library/ms166131%28v=sql.105%29.aspx,以及Sql Server服务经纪人对话小组
我假设您有一个与InitService
关联的InitQueue
。 您可以将WHERE
子句与RECEIVE
一起使用,以侦听同一会话中的消息:
WAITFOR (RECEIVE @response = CONVERT(xml, message_body)
FROM InitQueue -- InitService setup to use InitQueue?
WHERE conversation_handle = @Conversation1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.