从SQL Server Service Broker中提取消息

时间:2013-05-14 13:08:45

标签: sql .net sql-server nservicebus

如何从SQL Server Service Broker中提取邮件?我正在使用nservicebus。

我的SQL Server Service Broker队列中有消息,但我不知道如何处理它们。

非常感谢,

4 个答案:

答案 0 :(得分:1)

从Service Broker队列中提取消息的唯一方法是RECEIVE语句。 Service Broker具有Activation,可以触发运行RECEIVE语句的代码。

答案 1 :(得分:1)

此代码可以帮助您。     DECLARE @messageType SYSNAME     DECLARE @conversationHandle UNIQUEIDENTIFIER     DECLARE @Handle UNIQUEIDENTIFIER     DECLARE @MessageBody Nvarchar(max)

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获取更多信息。

答案 2 :(得分:0)

答案 3 :(得分:0)

NServiceBus不支持SSSB作为传输。 NServiceBus SQL Server Transport使用表作为轮询的队列。

我基于IAdvancedSatellite创建了自己的SSSB处理。但是,SSSB似乎不太可靠,我们停止使用它。原因是:

  1. SSSB在数据库恢复时关闭,在备份数据库时是否关闭并不重要
  2. SSSB以静默方式失败,因此当它最终被禁用时,只会吞下已发布的消息并在/ dev / null中消失,而不会出现任何错误
  3. 如果高级卫星发生故障,NServiceBus将继续运行,但不会处理您的SSSB消息。你必须小心自己恢复卫星。当使用传输时,当它发生故障时,整个服务会通过严重故障处理获得后果
  4. 在某些SQL Server上,SSSB获得了一些被发布到Windows事件日志的拒绝访问错误。如果没有在应用程序事件日志上设置限制,则会填满整个磁盘和服务器崩溃。
  5. 因此,如果您必须使用SQL Server,我宁愿建议使用strandard SQL Server传输。但是你应该记住它每秒都在轮询你的数据库。