2016-05-20 9 views
0

現在のアーキテクチャでは、AbstractPollingMessageListenerContainer ActiveMQキューからメッセージをポーリングするスレッドは、メッセージをキューからリモートサーバにディスパッチします。Spring AbstractPollingMessageListenerContainerスレッドがActive MQキュー内のメッセージを重複していないと認識する方法

私の質問は、それがキューからディスパッチしようとしているメッセージが既にそれによってディスパッチされているかどうかを認識する方法です。

同じAbstractPollingMessageListenerContainerスレッドへの応答の返送が遅いと仮定して、AbstractPollingMessageListenerContainerスレッドがまだ応答を待っているため、メッセージをキューから削除できず、そのメッセージのコピーがまだActiveMQキューにあります。

ここでは、受信者が遅いために1つのメッセージがキューから削除されず、99個のメッセージが既に削除されていることから、キューに100個のメッセージが存在すると仮定します。 ActiveMQキューからのプーリングメッセージを保持する別のAbstractPollingMessageListenerContainerスレッドがこのメッセージを見つけ、このメッセージを再びディスパッチするか、このメッセージが既に一度ディスパッチされたことを認識するので、このメッセージはディスパッチされません。 すでに発送されていることを認識した場合は、その認識方法を説明してください。

おかげで、よろしく、JMS仕様のほんの一部だ

プラカシュチャンドラ

答えて

1

。メッセージがキューからコンシューマに配信されると、ブローカはそれを別のコンシューマに配信しません。コンシューマが配信を確認すると(通常は処理が完了した後に)、メッセージはブローカから実際に削除されます。

元のコンシューマがクラッシュした場合、ブローカはそれを検出して自動的にメッセージの再配信を再キューします。同様に、コンシューマがトランザクションであり、メッセージをロールバックする場合、コンシューマは再度キューに入れられます。

JMS仕様を読んでください。

関連する問題