gpt4 book ai didi

sql-server - 让 Service Broker 在检测有毒消息方面不那么激进?

转载 作者:行者123 更新时间:2023-12-02 18:28:15 24 4
gpt4 key购买 nike

Sql Service Broker 使用以下启发式方法来确定队列中何时存在阻止应用程序执行任何有用工作的消息:

“Service Broker 提供自动有害消息检测。当包含 RECEIVE 语句的事务回滚五次时,Service Broker 将通过自动将队列状态设置为 OFF 来禁用该事务从中接收消息的所有队列。” (http://msdn.microsoft.com/en-us/library/ms166137.aspx)

我对这种基本方法很满意,但是有什么办法可以将重试次数从五次更改为更高的次数,也许是二十次?

这对我有用的原因是,我当前用来处理队列的代码是 Sql Server 外部的一个应用程序,它有大约 10 个工作线程,每个线程都有一个独立的 SqlConnection,并且每个线程都执行它自己独立的 RECEIVE 语句。如果该应用程序由于某种原因终止,这可能会导致每个工作线程单独的回滚事务,这足以禁用队列。相反,我希望能够在不禁用队列的情况下终止我的应用程序。我可能应该重写应用程序以使用单个 SqlConnection,但如果我可以说类似的话,那就容易多了

ALTER QUEUE MyQueue SET RollbacksBeforePoison=20

这样的事情可能吗?

最佳答案

不,有害消息检测回滚计数被硬编码为 5,并且您无法更改它。但是,当队列被禁用时,队列上会引发 BROKER_QUEUE_DISABLED 的事件通知。事件。您可以订阅此事件并拥有一个处理程序来通知管理员,甚至重新启用队列。此外,该应用程序可能会利用类似 the external activation mechanis 的东西。 m 将其线程池大小调整为传入消息的速率。

已更新

从 SQL Server 2008 R2 开始,有一个新选项 ALTER/CREATE QUEUE:

POISON_MESSAGE_HANDLING(STATUS = OFF/ON)

Specifies whether poison message handling is enabled. The default is ON.

A queue that has poison message handling set to OFF will not be disabled after five consecutive transaction rollbacks. This allows for a custom poison message handing system to be defined by the application.

关于sql-server - 让 Service Broker 在检测有毒消息方面不那么激进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1365396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com