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