Sql Service Broker は、次のヒューリスティックを使用して、アプリケーションが有用な作業を行うのを妨げているメッセージがキューにあるかどうかを判断します。
「Service Broker は、自動有害メッセージ検出を提供します。RECEIVE ステートメントを含むトランザクションが 5 回ロールバックすると、Service Broker は、キューの状態を自動的にオフに設定することにより、トランザクションがメッセージを受信したすべてのキューを無効にします。」( http://msdn.microsoft.com/en-us/library/ms166137.aspx )
私はこの基本的なアプローチで問題ありませんが、再試行の回数を 5 回から 20 回程度に変更する方法はありますか?
これが役立つ理由は、キューを処理するために現在使用しているコードが、約 10 個のワーカー スレッドを持つ Sql Server の外部のアプリであり、それぞれが独立した SqlConnection を持ち、それぞれが独自の独立したスレッドを実行するためです。 RECEIVE ステートメント。このアプリケーションがなんらかの理由で停止した場合、ワーカー スレッドごとに個別のロールバック トランザクションが発生する可能性があります。これは、キューを無効にするのに十分なロールバックです。対照的に、キューを無効にせずにアプリケーションを強制終了できるようにしたいと考えています。単一の SqlConnection を使用するようにアプリケーションを書き直す必要があるかもしれませんが、次のように言うことができれば、はるかに簡単になります。
ALTER QUEUE MyQueue SET RollbacksBeforePoison=20
そのようなことは可能ですか?