我有一项服务使用了臭名昭著的“即火即忘”模式(不要评判我,我没有创建它),该服务在 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
我试图弄清楚如何解决这个问题,但除了将存储过程添加到“发送”队列之外无法解决,但我不明白为什么这是必要的。
基本设置是:
- 插入“扫描到”表格
触发器调用“发送”服务,如下所示:
BEGIN DIALOG CONVERSATION @SBDialog FROM SERVICE ScanSendService TO SERVICE 'ScanReceiveService', 'CURRENT DATABASE' ON CONTRACT ScanContract WITH ENCRYPTION = OFF
“接收”服务调用一个存储过程,然后执行不相关的事情。队列详情如下:
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)
消息进入“发送”队列就好了,但不是“接收”队列。为什么 ssbdiagnose 抱怨这个问题,我该如何解决?
编辑:更多信息,因为似乎没有人有任何想法:(
我看了看,Microsoft.SqlServer.ServiceBroker.Diagnostics.dll
似乎所有这些检查都在每个队列上运行,无论是否“配置了激活”,但我什至不知道如何不配置激活......
如果有人感兴趣,来源:https ://gist.github.com/Mansfield7/5766457#file-gistfile1-cs-L12
编辑 2:我打开了该队列的激活并指定了一个什么都不做的存储过程。ssbdiagnose 错误消失了,但队列仍然损坏(接收队列仍然为空)。