あなたは正しい方向にいると思います。 3つの一般的なパターンは、ここにあります:
を処理することができます。
- メッセージは有効ですが、おそらく、あなたがメッセージを処理する必要があるいくつかのリソースが利用できない今
を処理することはできません。この場合、トランザクションをrollbackOnlyに設定すると、メッセージが再配信されます。うまくいけば、あなたのJMS実装はの再配信が遅れたという考え方をサポートしています。 MIAリソースが再び利用可能になるまで同じメッセージを何千回も再処理しないようにしてください。そうでない場合(私はWebSphere MQを見ています)、通常は、メッセージを一時的に処理できないメッセージとコミット用に予約された別のJMSキューにプッシュします。 MIAリソースがオンラインに戻ったとき、私は手続き的にそのキューからすべてのメッセージを読んで、それらが完了するまで処理されたメインの[元の]キューに書き戻します。
は例外を抑制し、トランザクションをコミットします。あなたはそのメッセージをもう一度見ることはありません。無効なメッセージの監査証跡を保持するには:
- は、それが後で調べることができ悪いキューに無効なメッセージをオフに書きます。
- ログメッセージ
- の中身うち主なポイントは、しかし、確認することです
無効(タイプ別に、ソース・キュー、解析エラーなど)メッセージのJMXカウンタをキープがを知っている場合は、となることはありません。そのメッセージを処理できるようにしてください。
非常に便利な回答ありがとうございます!これは良いアプローチのように思えます。これをSpringで実装した経験はありますか?今は、DefaultMessageListenerContainerを大いに中継しています。これにより、各イベントで提案されたアクションを実行するのが少し難しくなります。しかし、私は低レベルに行きたくはありません。何か案は? – Kristoffer