2017-04-20 3 views
0

遅い消費者の場合にはブロックされます方法:プロデューサーは、私はActiveMQのドキュメント<a href="http://activemq.apache.org/consumer-dispatch-async.html" rel="nofollow noreferrer">here</a>からの引用、以下の読み取り

同期メッセージの配信を使用しての欠点は プロデューサーが遅いがある場合にブロックする可能性が高いということです消費者は彼に がメッセージを送信しています。

しかし、私は、JMSクライアント(プロデューサ)がActiveMQインスタンスのキューにメッセージを送信することを理解しているため、一般的にプロデューサがブロックされる可能性はありませんブローカー)それはそれです、今、プロデューサーは無料ですか、言い換えれば、メッセージを送信したプロデューサースレッドは自由に完了/死ぬことができます。次に、他のJMSクライアント(コンシューマ)がそのキューをリッスンします。メッセージがブローカに到着するとすぐに、ブローカはそのメッセージをリスニングコンシューマに送信します。

ここで、プロデューサーは消費者に依存しているこのすべてにおいて、

答えて

2

プロデューサが永続メッセージをブローカに送信するとき、ブローカはメッセージをディスクに書き込んでからプロデューサに返信して、後でコンシューマに送信するためにメッセージが安全に保存されていることを知らせます。スローコンシューマの場合、プロデューサは最終的にブローカがリソース制限に達し、そのメッセージをメモリまたはディスクのキューに格納できない場合があります。ブローカはすべてブローカの構成に依存します。

プロデューサは消費されるまでメッセージを保持するために必要なブローカ上のリソースと同じくらい消費者にあまり結びついていません。

+0

一般的には、プロデューサが消費者の低速によってブロックされる唯一の方法です。そうでなければ、プロデューサスレッドがメッセージが消費されるのを待たずに質問した正しいですよね? – hagrawal

+0

プロデューサは、メッセージが同期的に送信され、ブローカに格納するスペースがないために応答を保持するときだけ待機します。私がすでに言ったように、 –

+0

メッセージが同期して送信されても​​、プロデューサは "ブローカ"からの応答/確認応答を待つでしょう。メッセージは消費者によって消費されるのを待たずにいますよね? – hagrawal

関連する問題

 関連する問題