cosumer が消費できる速度よりも速い速度でメッセージを生成しているプロデューサーがあります。消費者側の技術スタックとして Spring JMS 統合を使用しています。現在、AUTO_ACKNOWLEDGE
モードを使用しています。
リスナーのメソッドでは、受信時にクライアント側のジョブをジョブ キューに送信し、メソッドonMessage()
から戻る予定です。onMessage()
これは、a) 処理が失敗した場合、または b) 処理中にサーバーがダウンした場合、回復する方法がないことを意味します。
を使用するオプションを検討しましたCLIENT_ACKNOWLEDGE
が、これは、タイムスタンプが大きいメッセージを確認すると、タイムスタンプが小さいすべてのメッセージが自動的に確認されることを意味します。新しいタイムスタンプを持つメッセージの処理が成功しても、古いタイムスタンプを持つすべてのメッセージが完全に処理されるわけではないため、これは明らかに望ましくありません。実際には、メッセージごとの承認を確認しています。ただし、これは設計上の欠陥があることを意味することをどこかで読みました。
もう 1 つのオプションはSessionAwareMessageListener
、Spring が提供するインターフェースを使用することです。このインターフェイスを使用する契約では、 aJMSException
がスローされた場合onMessage
、メッセージが再配信されると規定されています。ただし、これを目的に使用する方法が完全にはわかりませんでした。
私はこれについてさらに掘り下げますが、皆さんからの助けをいただければ幸いです。