Session.CLIENT_ACKNOWLEDGEであるsessionAcknowledgeMode2を使用していることを示します。次のステートメントは、AbstractMessageListenerContainerJavadocから直接取得されます。
- "CLIENT_ACKNOWLEDGE":リスナーの実行が成功した後のメッセージの自動確認。例外がスローされた場合の再配信はありません。
したがって、問題はSpring DMLCにあるのではなく、実行時例外がスローされたときにSession.recover()を呼び出す機能です。リスナーのonMessage()メソッドでtry / catchを使用して、Session.recover()を自分で呼び出すことにより、実行時例外を処理することは可能ですか?
アップデート:
あなたはボイラープレートコードについて良い点を述べています。それは多くの場所に散らばり、リファクタリングを懇願します。そのようなコードを抽象化することはできませんか?これは一般的な解決策です。適切な処理を伴うtry/catchを含むメソッドを使用して抽象親クラスを作成すると、うまくいくはずです。次に、親クラスを拡張して、必要な数のカスタムプロセッサを実装します。その後、Springアプリのコンテキストを使用して、適切な方法でプロセッサを相互に接続することもできます。
Spring固有のコードはどこでも実行できるため、アプリケーションに問題を追加したことはありません。これは、私がSpringを使い始めたときの私にとって重要でした。これは単一のアプリサーバーやサーブレットコンテナに固有のものではないため、com.ibmまたはcom.oracleをソースコードにインポートした場合のように、Springを使用して自分自身を隅にコーディングしているわけではありません。実際、私は1つのMOMでSpring JMS APIを使用し、JMS接続ファクトリ定義以外は何も変更せずに別のMOMに切り替えました。