sql-server – 使Service Broker在检测毒性消息方面不那么积极?
Sql Service Broker使用以下启发式方法来确定队列中的消息何时阻止您的应用程序执行任何有用的工作:
“Service Broker提供自动中毒消息检测.当包含RECEIVE语句的事务回滚五次时,Service Broker会通过自动将队列状态设置为OFF来禁用事务从中接收消息的所有队列.” (http://msdn.microsoft.com/en-us/library/ms166137.aspx) 我对这种基本方法很好,但有没有办法将重试次数从5改为更高,可能是20? 这对我有用的原因是我当前用来处理队列的代码是一个在Sql Server之外的应用程序,它有大约10个工作线程,每个工作线程都有一个独立的SqlConnection,每个线程执行自己独立的RECEIVE声明.如果此应用程序由于某种原因而死亡,则可能会为每个工作线程导致单独的回滚事务,这足以回滚以禁用队列.相反,我希望能够在不禁用队列的情况下终止我的应用程序.我应该重写应用程序以使用单个SqlConnection,但如果我可以说类似的话会更容易 ALTER QUEUE MyQueue SET RollbacksBeforePoison=20 有可能吗? 解决方法不,病毒邮件检测回滚计数硬编码为5,您无法更改它.但是,当禁用队列时,会在BROKER_QUEUE_DISABLED 事件的队列上引发事件通知.您可以订阅此事件并拥有一个处理程序,该处理程序可以通知管理员,甚至可以重新启用该队列.此外,该应用程序可能会利用像
the external activation mechanism这样的东西来调整其线程池大小到传入消息的速率.
更新 从SQL Server 2008 R2开始, POISON_MESSAGE_HANDLING(STATUS = OFF/ON)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |