不一致的激活设置

时间:2013-06-11 20:14:08

标签: sql-server sql-server-2012 service-broker fire-and-forget

我有一个使用臭名昭着的火灾和忘记模式的服务(不要评判我,我没有创建它)在SQL Server 2005上工作正常。我最近升级到2012年,现在ssbdiagnose抱怨不一致激活设置:

The activation settings for queue dbo.ScanSendQueue are inconsistent: Activation is configured but disabled
The activation settings for queue dbo.ScanSendQueue are inconsistent: Activation is configured with 0 max_queue_readers
The activation settings for queue dbo.ScanSendQueue are inconsistent: Activation is configured but no procedure is specified

我试图弄清楚如何解决这个问题但是无法想象将存储过程添加到“发送”队列,但我不明白为什么这是必要的。

基本设置是:

  1. 插入“扫描范围”表
  2. 触发调用“发送”服务,如下所示:

    BEGIN DIALOG CONVERSATION @SBDialog FROM SERVICE ScanSendService TO SERVICE 'ScanReceiveService', 'CURRENT DATABASE' ON CONTRACT ScanContract WITH ENCRYPTION = OFF

  3. “接收”服务调用存储过程然后执行不相关的操作。队列详情如下:

    ALTER QUEUE [dbo].[ScanReceiveQueue] WITH STATUS = ON , RETENTION = OFF , ACTIVATION ( STATUS = ON , PROCEDURE_NAME = [dbo].[usp_Process_ScanReceiveQueue] , MAX_QUEUE_READERS = 1 , EXECUTE AS OWNER ), POISON_MESSAGE_HANDLING (STATUS = OFF)

  4. 消息使其成为“发送”队列,但不是“接收”队列。为什么ssbdiagnose抱怨这个,我该如何解决?

    编辑:更多信息,因为似乎没有人有任何想法:(

    我查看了Microsoft.SqlServer.ServiceBroker.Diagnostics.dll,似乎所有这些检查都在每个队列上运行,无论是否配置了“激活”,但我甚至不知道如何配置激活。 ...

    如果有兴趣的话来源:https://gist.github.com/Mansfield7/5766457#file-gistfile1-cs-L12

    编辑2:我打开了该队列的激活并指定了一个什么也没做的存储过程。 ssbdiagnose错误消失,但队列仍然中断(接收队列仍为空)。

1 个答案:

答案 0 :(得分:0)

在为该队列正确添加激活后,ssbdiagnose错误消失了,但服务仍无法正常工作。

我附加了SQL Server分析器并发现数据库不处于受信任模式,因此我运行了以下命令,它开始工作。

ALTER DATABASE [DBNAME] SET TRUSTWORTHY ON;

我仍然很想知道关于激活的ssbdiagnose警告的更多信息,但是现在我的问题已经解决了。