2013-05-14 119 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传输。但是,您应该记住它每秒钟都在轮询您的数据库。

相关问题