2013-05-14 79 views

回答

1

此代碼將幫助您。 DECLARE @messageType SYSNAME DECLARE @conversationHandle UNIQUEIDENTIFIER DECLARE @Handle UNIQUEIDENTIFIER DECLARE @MessageBody爲nvarchar(最大)

DECLARE @conversation_group_id UNIQUEIDENTIFIER ; 

WAITFOR(
GET CONVERSATION GROUP @conversation_group_id 
    FROM [UpdateReceiveQueue] 
    ); 

WAITFOR (
     RECEIVE TOP(1) 
      @messageType=message_type_name, 
      @MessageBody=message_body, 
      @conversationHandle=conversation_handle 
      FROM [UpdateReceiveQueue] where conversation_group_id = @conversation_group_id 
),timeout 2000;  

print @MessageBody 

請使用link以獲取更多信息。

1

從Service Broker的隊列中提取信息的唯一方法是RECEIVE聲明。 Service Broker有Activation可以觸發運行RECEIVE語句的代碼。

+0

請問我能舉個例子嗎? – 2013-05-15 14:00:44

+0

請參閱http://rusanu.com/2006/10/16/writing-service-broker-procedures/ – 2013-05-15 14:20:02

+0

但是NServiceBus 4是否支持開箱即用?我的意思是從SSB中提取消息? – Marco 2013-10-11 09:23:08

0

NServiceBus不支持SSSB作爲傳輸。 NServiceBus SQL Server傳輸使用表作爲輪詢隊列。

我創建了基於IAdvancedSatellite的自己的SSSB處理。但是,SSSB似乎不是很可靠,我們停止使用它。其原因是:

  1. SSSB關閉數據庫恢復,不要緊,如果是有人關閉DB時,備份
  2. SSSB靜靜地失敗,所以當它得到最終禁用,所發佈的消息都只是在/ dev/null中吞噬並消散沒有任何錯誤
  3. 如果高級衛星發生故障,NServiceBus將繼續運行但不處理您的SSSB消息。你必須小心地恢復自己的衛星。當使用傳輸時,當它發生故障時,整個服務將通過嚴重故障處理獲得結果
  4. 在某些SQL Server上,SSSB獲得了一些被拒絕的訪問錯誤,這些錯誤已發佈到Windows事件日誌中。如果在應用程序eventlog上沒有設置限制,則會填滿整個磁盤和服務器崩潰。

因此,如果您必須使用SQL Server,我寧願推薦使用strandard SQL Server傳輸。但是,您應該記住它每秒鐘都在輪詢您的數據庫。

相關問題