2

请问如何从 SQL Server Service Broker 中提取消息?我正在使用 nservicebus。

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

非常感谢,

4

4 回答 4

1

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

于 2013-05-14T13:24:57.850 回答
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

请使用此链接获取更多信息。

于 2016-02-28T18:41:11.293 回答
0

我不确定,但我认为这些链接会对您有所帮助:

http://blog.sqlauthority.com/2009/09/21/sql-server-intorduction-to-service-broker-and-sample-script/

集成 SQL Service Broker 和 NServiceBus

于 2013-05-14T13:20:47.627 回答
0

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

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

  1. SSSB 在数据库还原时关闭,备份数据库时是否关闭无关紧要
  2. SSSB 静默失败,因此当它最终被禁用时,发布的消息只会被吞没并消失在 /dev/null 中,没有任何错误
  3. 如果高级卫星出现故障,NServiceBus 会继续运行,但不会处理您的 SSSB 消息。您必须小心自己恢复卫星。但是,当使用传输时,当它发生故障时,整个服务会通过关键故障处理产生后果
  4. 在某些 SQL Server 上,SSSB 收到了一些已发布到 Windows 事件日志的拒绝访问错误。如果没有对应用程序事件日志设置限制,它会填满整个磁盘并导致服务器崩溃。

因此,如果您必须使用 SQL Server,我宁愿推荐使用标准 SQL Server 传输。但是您应该记住,它每秒都在轮询您的数据库。

于 2015-02-01T16:57:26.890 回答