2012-03-01 10 views
1

cosumerが消費できる速度よりも速い速度でメッセージを生成するプロデューサがあります。我々は、消費者側の技術スタックとしてSpring JMSの統合を使用しています。現在、我々はAUTO_ACKNOWLEDGEモードを使用しています。メッセージリスナーでのメッセージの再配信とエラー処理

受信者のonMessage()メソッドでは、受信時にクライアント側ジョブをジョブキューにサブミットし、onMessage()メソッドから返すよう計画しています。これは、a)処理が失敗した場合、またはb)処理中にサーバーがダウンした場合、回復する手段がないことを意味します。

CLIENT_ACKNOWLEDGEを使用するオプションを検討しましたが、タイムスタンプの高いメッセージを確認すると、タイムスタンプの少ないすべてのメッセージが自動的に確認されます。より新しいタイムスタンプのメッセージを処理することができないということは、古いタイムスタンプを持つすべてのメッセージが完全に処理されることを意味しないため、これは明らかに望ましくありません。実際には、メッセージごとに確認することにしています。しかし、私はどこかに、これはいくつかの設計上の欠陥があることを意味しています。

もう1つの方法は、Springによって提供されるSessionAwareMessageListenerインターフェイスを使用することです。このインタフェースを使用する契約では、onMessageからJMSExceptionがスローされた場合、メッセージは再配信されます。しかし、私はこれを私たちの目的のためにどのように使うべきかについて完全にはわかっていませんでした。

私はこれをさらに深く掘り下げていますが、皆さんからの助けに感謝します。

答えて

0

セッション意識したメッセージは、onMessageのプロトタイプを以下ました:メッセージ再配信のための

onMessage(Message message, Session session) 

のInvokeのSession.recover()。 session.recover()はすべての未確認のメッセージをjms送り先に返します。

関連する問題