![](/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.