【问题标题】:inconsistent activation settings激活设置不一致
【发布时间】: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

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

基本设置是:

  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)

消息可以进入“发送”队列,但不能进入“接收”队列。为什么 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


    【解决方案1】:

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

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

    ALTER DATABASE [DBNAME] SET TRUSTWORTHY ON;

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-03
      • 2015-10-08
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      • 2011-07-17
      相关资源
      最近更新 更多