【问题标题】:Broker Queue - Move Poisoned Messages to Table代理队列 - 将中毒消息移至表
【发布时间】:2013-12-15 21:14:52
【问题描述】:

目前我有一个存储合并查询的队列,这些查询在从队列中读取后运行。这一切都很好,目前如果合并出现错误,队列将被禁用,我必须手动删除消息(或修复合并,因为它是)。

我想知道是否可以简单地将中毒消息移动到桌子上?队列运行重要的(和不同的)合并,必须持续运行以确保数据更新。比如说,队列在一夜之间变得残废并获得大量积压,这对我没有好处。

我有什么办法可以简单地将坏消息推送到表格中?我自己尝试过,但是我最终在 TRANSACTION 中有一个 TRY...CATCH,它无论如何都会对错误执行回滚(从而调用 5 个回滚以禁用规则)。大多数在线解决方案仅提及手动删除消息。

有什么建议吗?这只是一个坏主意吗?如果有,为什么?

谢谢。

【问题讨论】:

    标签: sql sql-server queue service-broker


    【解决方案1】:

    可以通过在 CREATE/ALTER QUEUE 语句中将 POISON_MESSAGE_HANDLING 状态设置为 OFF 来关闭 disable-after-5-rollbacks。然后您可以使用 TRY...CATCH 手动处理失败的事务。

    和你一样,我不觉得这个功能很有用,所以几乎总是在我的应用程序中关闭它,并以任何看起来最好的方式处理问题消息。

    【讨论】:

    • 感谢您的回复。如果出现任何严重错误,我确实喜欢它作为一种保护措施,但你是对的,我可能不得不关闭它以便自己处理错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2017-11-11
    • 2011-02-21
    • 2013-12-29
    • 2012-07-24
    • 2018-10-08
    相关资源
    最近更新 更多