これに対する回避策を作成することができました。
- メッセージボックスを照会し、消費されたが処理されなかったすべてのメッセージを取得します
- パフォーマンスの低いオーケストレーション インスタンスを強制終了する
- オーケストレーションの新しいインスタンスを作成したすべての未処理のメッセージをパイプで戻します。
この新しいインスタンスは、前のインスタンスのすべての履歴 (消費されたメッセージ) によって妨げられていないため、実行速度が約 60 倍速くなり、残りのバックログが高速にクリアされました。
消費されたが処理されていないメッセージを特定する方法は、ここに記載されている方法を使用することでした。
メッセージ ボックス データベースからメッセージ GUID のリストを取得したら、残りは次の場所に文書化されています。
要約すると、メッセージ ID を取得したら、メッセージ ボックス db の Parts テーブルから imgPart 列を選択します。これにより、メッセージ本文のバイナリ エンコードされた圧縮バージョンが得られます。次に、上記の記事のコードを使用してメッセージを再構築します。
この後、すべてのメッセージを取得し、MSMQ 受信場所を介してそれらを biztalk に送り返すだけでした。
長期的には、この問題の発生につながった設計上の欠陥に対処する必要があります。フラッディングは予想されていませんでしたが、実行中のプロセスのパフォーマンスが重い負荷の下で床を突き破ってしまうことは決して良いことではありません。
私たちが抱えている問題は、コンシューマー システムの大部分で、ソース メッセージの順序を維持する必要があることです。このため、どこにでもシングルトンがあり、そのすべてがこの問題にさらされる可能性があります。
ここで、BizTalk でのメッセージの再シーケンス戦略について投稿しました: BizTalk での順序付けされた配信のための再シーケンス戦略