2017-12-23 14 views
0

送信者がキューにメッセージを送信している場合、たとえばmessage1などは、sender1によってキューに送信されます。今すぐconsumer1という名前のコンシューマがキューに接続し、メッセージmessage1を読み取ります。JMSキューに送信されるメッセージは、単一のコンシューマだけが消費しますか?

consumer2という名前の別のコンシューマがあります。しかし、メッセージmessage1は既にconsumer1によって消費されており、consumer2では利用できません。

次のメッセージがqueueに到着すると、consumer1より前のキューを読み取ると、consumer2がそのメッセージを受信することがあります。

queueから最初のメッセージを取得するために、1つのコンシューマがもう1つ前にキューを読み取るかどうかは関係ありませんか?

答えて

1

これはJMSのキューの性質であり、メッセージは1つのコンシューマに送信され、いったん消えたら、次のコンシューマは次のメッセージを受け取ることができます。これは競合するコンシューマまたは負荷分散と呼ばれることがよくあります。キュー内の項目に関連付けられた作業に多大な時間がかかる場合、スループットを向上させるために、ジョブまたは作業項目がエンキューされると、コンシューマはワークを共有できます。

メッセージングブローカに応じて、そのコンシューマだけがキューからメッセージを読み取ることができるようにするオプションがあります。他のコンシューマは、排他的なコンシューマが退席して並べ替えを行うのを待ちます。

他のオプションは、特定のメッセージを複数のキューにルーティングする場合や、AcitveMQ仮想トピックを使用してメッセージをトピックに送信し、そのメッセージを特定のコンシューマキューにエンキューする場合です。

解決策は、使用しているブローカーと解決しようとしている問題によって異なりますが、問題の中で実際に明確にしているものはありません。

+0

キューメッセージが1人の消費者だけで消費される場合、なぜキューに複数のコンシューマがアクセスできるのか不思議でした。それがどんな利益をもたらすでしょうか?答えをありがとう。 – muasif80

+0

これはキューであり、これが定義されているため、混乱している場合はJMS仕様を読んでください。 –

関連する問題