9

すべての着信要求をキューに入れ、後で処理するメッセージ ベースのサービスに取り組んでいます。エラー処理のベスト プラクティスは何ですか。たとえば、次のシステムに情報を送信する際のメッセージの形式が正しくなかったり、通信エラーが発生したりします。

トランザクションを使用することで、後者に対処することができますが、メッセージの形式が正しくない場合、メッセージを再試行したり保持したりする必要はありません。シナリオごとに異なるエラー処理を実装するアイデアはありますか?もしそうなら、どのように行うべきですか?

ありがとう!

4

1 に答える 1

14

あなたは正しい軌道に乗っていると思います。ここには 3 つの一般的なパターンがあります。

  • メッセージは有効であり、処理できます

通常の処理が適用されます。

  • メッセージは有効ですが、現在処理できません

メッセージを処理するために必要なリソースが利用できない可能性があります。この場合、トランザクションをrollbackOnlyに設定すると、メッセージは再配信されます。MIA リソースが再び使用可能になるまで同じメッセージを何千回も再処理しないように、JMS 実装が遅延再配信の概念をサポートしていることを願っています。そうでない場合 (そうです、WebSphere MQ のことです)、私が通常行うことは、一時的に処理できないメッセージ用に予約された別の JMS キューにメッセージをプッシュしてコミットすることです。MIA リソースがオンラインに戻ると、そのキューからすべてのメッセージを手続き的に読み取り、メインの [元の] キューに書き戻し、そこで完全に処理されます。

  • メッセージが無効です

例外を抑制し、トランザクションをコミットします。そのメッセージは二度と表示されません。無効なメッセージの監査証跡を保持するには:

  • 無効なメッセージを不良キューに書き込んで、後で調べることができるようにします。
  • メッセージの内容をログアウトする
  • 無効なメッセージの JMX カウンターを保持する (タイプ、ソース キュー、解析エラーなどで分類)

ただし、重要な点は、そのメッセージを処理できないことがわかっている場合は、必ずトランザクションをコミットすることです。

于 2011-08-09T12:52:20.393 に答える