誰かが私を助けてくれることを願っています-私はJBoss 5.1とMQ Series 7をEJB / JMSベースのアプリケーションで使用しています。アプリケーションに複数のメッセージ駆動型 Bean があり、それぞれが MQ Series メッセージ キューをリッスンしています。メッセージの処理中にエラーが発生した場合、mq シリーズがメッセージの再配信を試行する前に一定時間待機できるように、「再試行の遅延」を構成できる必要があります。MQ Series のドキュメントを徹底的に調べましたが、MQ Series でこれを実現する方法をまだ見つけていません。JBoss のデフォルトの JMS プロバイダーにはこれを行う方法があることは知っていますが、現在は MQ Series の使用に制限されています。再試行の遅延を設定できなかったので、失敗したメッセージがあると、アプリケーションはメッセージの配信と継続的なロールバックのタイトなループに陥ります。
3 に答える
これは、このような問題に対する小さなインフラストラクチャを作成する機会になる可能性があります。
メッセージが Bean に入ったときに JMSDeliveryCount を確認すると (処理する前に -- コミット スコープを考慮してください)、すでにいくつかのロールバックが行われていることがわかります。メッセージをステージング キューに送信しますが、後で使用できるように、jms プロパティに宛先キュー名を追加します。
簡単なプロセスを一定の間隔で実行して、ステージング キューをクリアし(たとえば 5 分ごと)、メッセージをルーティング キューに送信できます。
別のプロセスがルーティング キューに置かれ、 (宛先キュー名を追加した) jms プロパティを調べて、メッセージを元の宛先に送信することができます。
それは貧乏人のブローカーですが、目標を達成します。実際にやりたいことを実行するための機能があまり組み込まれていないことは事実です。
あなたは運が悪いと思います。私が知る限り、このシナリオで微調整できる唯一のパラメータは、メッセージが再試行される最大回数 (BOTHRESH) と、メッセージが送信される例外/バックアウト キュー (BOQUEUE) の名前です。再試行回数が上限を超えています。
パアル
再試行制限を指定して、指定された試行後に連続ロールバックが停止するようにすることができます。