あなたは正しい軌道に乗っていると思います。ここには 3 つの一般的なパターンがあります。
通常の処理が適用されます。
メッセージを処理するために必要なリソースが利用できない可能性があります。この場合、トランザクションをrollbackOnlyに設定すると、メッセージは再配信されます。MIA リソースが再び使用可能になるまで同じメッセージを何千回も再処理しないように、JMS 実装が遅延再配信の概念をサポートしていることを願っています。そうでない場合 (そうです、WebSphere MQ のことです)、私が通常行うことは、一時的に処理できないメッセージ用に予約された別の JMS キューにメッセージをプッシュしてコミットすることです。MIA リソースがオンラインに戻ると、そのキューからすべてのメッセージを手続き的に読み取り、メインの [元の] キューに書き戻し、そこで完全に処理されます。
例外を抑制し、トランザクションをコミットします。そのメッセージは二度と表示されません。無効なメッセージの監査証跡を保持するには:
- 無効なメッセージを不良キューに書き込んで、後で調べることができるようにします。
- メッセージの内容をログアウトする
- 無効なメッセージの JMX カウンターを保持する (タイプ、ソース キュー、解析エラーなどで分類)
ただし、重要な点は、そのメッセージを処理できないことがわかっている場合は、必ずトランザクションをコミットすることです。