Sql Service Broker 使用以下启发式方法来确定您的队列中何时有消息阻止您的应用程序执行任何有用的工作:
“Service Broker 提供自动有害消息检测。当包含 RECEIVE 语句的事务回滚五次时,Service Broker 会通过自动将队列状态设置为 OFF 来禁用事务接收消息的所有队列。” ( http://msdn.microsoft.com/en-us/library/ms166137.aspx )
我对这种基本方法很好,但是有没有办法将重试次数从五次更改为更高的值,也许是二十次?
这对我有用的原因是我当前用来处理队列的代码是 Sql Server 之外的一个应用程序,它有大约 10 个工作线程,每个工作线程都有一个独立的 SqlConnection,每个都执行自己独立的接收语句。如果此应用程序因某种原因而死,这可能会导致每个工作线程的单独回滚事务,这足以禁用队列。相反,我希望能够在不禁用队列的情况下终止我的应用程序。我可能应该重写应用程序以使用单个 SqlConnection,但如果我能说类似的话会容易得多
ALTER QUEUE MyQueue SET RollbacksBeforePoison=20
这样的事情可能吗?