2012-05-11 8 views
6

私はSpring JMSを使用してWebsphere MQサーバーに接続しています。 SessionAwareListenerインターフェイスを実装してカスタムリスナーを作成し、ビジネスロジックの古いコードを再利用しました。JMS DefaultMessageListenerContainerがメッセージを再試行する回数を制限する方法を教えてください。

リスナーはテスト中にStringIndexOutOfBoundsExceptionをスローしますが、これは捕捉できません。しかし、私はログで次の約32回印刷され、その後DMLCが停止することがわかります。

DMLCがメッセージを再試行する頻度を制御する方法と、キャッチされない例外を処理する方法はありますか?

+0

IBM MQ JCAアダプタを正しく使用していますか? Springアプリケーションはどこにデプロイされていますか? – DaTroop

+0

アプリケーション・サーバーではなく、Websphere MQのみを使用しています。 SpringアプリケーションはスタンドアロンのJVMです。 –

答えて

5

いつでもJMSDeliveryCountを確認できます。あなたが最大と考えている数以上の場合は、メッセージを処理せずに戻ります。

また、いくつか試行した後で、無効なメッセージを例外の宛先に移動する場合はconfigure your Websphereにすることもできます。

+0

記事をありがとう。それはバックエンドで何が起こっていたのかを知るのに役立ちました。 JMSXDeliveryCountおよびJMSRedelivered JMSプロパティーを使用してメッセージを処理しています。 –

+0

エラー処理に役立つSpring APIの何かを知っていますか? –

+0

残念ながら、私の友人の春については分かりません。 – DaTroop

5

何らかのエラーの後にメッセージをキューに戻すことは、Websphere MQの世界でバックアウトと呼ばれます。

それを処理するためにどのように二つの選択肢があります:キュー・マネージャーで

  1. :あなたが再キューイング指定されたキューのためプロパティに名前を付けるバックアウトのしきい値バックアウトを設定することができます。バックアウトのしきい値に達すると、キューマネージャーはメッセージを再配信するのではなく、バックアウトのキュー名で指定されたキューに入れます。詳細については、WebSphere MQ queue propertiesを参照してください。

  2. アプリケーションで:JMS APIを使用する場合は、メッセージの処理を開始する前にmsessage.getIntProperty("JMSXDeliveryCount")を呼び出してJMSXDeliveryCountプロパティを確認してください。しきい値に達した場合は、エラーを処理します。

+0

お返事ありがとう! DaTroopと結ばれたあなたたちは、この問題を解決するのを助けました。 –

+0

1の場合、MQプロパティは再試行制限の場合はBOTHRESH、再試行制限に達するとメッセージが転送されるキューの場合はBOQNAMEになります。 –

関連する問題