【发布时间】:2013-06-11 20:14:08
【问题描述】:
我有一项服务使用臭名昭著的“即火即忘”模式(不要评判我,我没有创建它),该服务在 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 错误消失了,但队列仍然损坏(接收队列仍然为空)。
【问题讨论】:
标签: sql-server sql-server-2012 service-broker fire-and-forget