当服务代理队列被禁用时,如何启用它?

当服务代理队列被禁用时,如何启用它?

我有一个场景,其中外部应用程序正在监视队列,然后在将某些内容放入队列时采取行动。我只是将其包装在事务内部,以尝试在操作失败时防止内容从队列中出来。发生的事情是,如果我的应用程序发生故障导致事务回滚,则在某些情况下队列将被禁用。

我正在寻找一种无需打开 SQL Server Management Studio 即可启用队列的方法。

答案1

如果连续 5 条 RECEIVE 语句被回滚,则毒药消息检测将启动。没有办法禁用此功能,也没有办法在队列读取器中重新启用队列。由于禁用是异步的,因此它可以禁用队列您的逻辑尝试重新启用已禁用的队列。

正确的解决方案是永远不要故意回滚并处理所有错误。然而,这并不总是可能的。我的建议是连接一个事件通知在 QUEUE_DISABLED 事件队列中。这将触发通知,您可以对此通知做出反应。

可以使用以下方法重新启用队列:

ALTER QUEUE [queuename] WITH STATUS = ON;

相关内容