1

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

リスナーのメソッドでは、受信時にクライアント側のジョブをジョブ キューに送信し、メソッドonMessage()から戻る予定です。onMessage()これは、a) 処理が失敗した場合、または b) 処理中にサーバーがダウンした場合、回復する方法がないことを意味します。

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

もう 1 つのオプションはSessionAwareMessageListener、Spring が提供するインターフェースを使用することです。このインターフェイスを使用する契約では、 aJMSExceptionがスローされた場合onMessage、メッセージが再配信されると規定されています。ただし、これを目的に使用する方法が完全にはわかりませんでした。

私はこれについてさらに掘り下げますが、皆さんからの助けをいただければ幸いです。

4

1 に答える 1

0

セッション認識メッセージには、次の onMessage プロトタイプがあります。

 onMessage(Message message, Session session)

メッセージの再配信のために session.recover() を呼び出します。session.recover() は、すべての未確認メッセージを jms 宛先に送り返します。

于 2012-04-20T11:26:17.570 に答える