【问题标题】:SQL Server 2005 Service Broker behaviour for poison messages有害消息的 SQL Server 2005 Service Broker 行为
【发布时间】:2012-09-14 07:23:08
【问题描述】:

在 SQL 2008 R2 中创建 Service Broker 队列时,可以将 POISON_MESSAGE_HANDLING 状态指定为 ON 或 OFF。据我了解,如果它打开,则在消息连续回滚 5 次后,该消息将被视为有毒消息,并且队列将自动禁用。还引发了 BROKER_QUEUE_DISABLED 事件。

在 SQL 2005(和 2008 非 R2)中,您没有获得 POISON_MESSAGE_HANDLING 设置的选项。 SQL 2005 的行为是否与 2008 R2 相同,但此设置为 ON,或此设置为 OFF,还是有所不同?

【问题讨论】:

    标签: sql-server-2005 sql-server-2008-r2 service-broker


    【解决方案1】:

    Service Broker 自 2005 年以来一直在处理有害消息,并且始终以相同的方式工作:连续 5 次回滚会禁用队列。最终添加了禁用它的选项,但您必须考虑到禁用有害消息处理是一个糟糕的主意:如果您真的遇到有害消息,系统将在没有进展的情况下旋转令人作呕。

    【讨论】:

    • 禁用它的一个很好的理由是你有应用程序级的毒消息检测。例如,您可以将有害消息移出队列,以便对其进行跟踪并可能重新排队。但更重要的是,队列可以继续接收和处理消息。
    • @JosephDaigle:支持该方案的决定非常明确。将消息移动到“错误队列”并在按消息流的顺序恰好一次(对话)的上下文中继续处理是等待发生的灾难。我们记录了实施此类的经纪交易应用程序,并由于处理无序消息而导致超过 100 万美元的业务损失。应用程序仍然可以通过响应 QUEUE_DISABLED 事件通知来实现自动处理,但至少如果他们在脚下开枪是他们自己的代码,而不是系统代码。
    • 你是对的。一些系统要求按顺序精确一次,其他系统可以处理乱序或不止一次。我想这取决于系统和要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    相关资源
    最近更新 更多