2

ブローカーが構成された制限に達したときに、ActiveMQ プロデューサーをフェイルオーバーするように構成したいと考えています (私は Stomp プロトコルを使用しています)。消費者が過負荷のブローカーから衰えることなく消費を続けられるようにしたい.

ActiveMQ のドキュメントを読むと、ブローカーが限界 (メモリまたはディスク) に達したときに ActiveMQ を構成して、いくつかのことのいずれかを実行できるようです。

  1. producerFlowControl="true"(送信をブロックすることにより)メッセージを遅くする
  2. 使用時に例外をスローするsendFailIfNoSpace="true"
  3. 上記のどちらでもない、その場合..どうなるかわかりませんか? TCP フロー制御に戻りますか?

これらのいずれも、プロデューサーのフェイルオーバーをトリガーするように設計されているようには見えません。プロデューサーは、接続に失敗するとフェイルオーバーしますが、私が知る限り、送信に失敗した場合はフェイルオーバーしません (たとえば、プロデューサーのフロー制御が原因で)。

では、制限に達したときに接続を拒否するようにブローカーを構成することは可能ですか? または、プロデューサー側で速度低下を検出し、その時点で別のブローカーを使用するようにプロデューサーを手動で再構成するのが最善の策ですか?

ありがとう!

4

1 に答える 1

4

あなたの最善の策はsendFailIfNoSpace、またはそれ以上を使用することですsendFailIfNoSpaceAfterTimeout。これにより、クライアントに例外がスローされ、クライアントはアプリケーション レベルで別のブローカーにメッセージを再送信しようとする可能性があります (ただし、このロジックを Stomp ライブラリの上にカプセル化し、コードからこのファサードを使用することはできます)。ただし、ActiveMQ セットアップが正しく配線されている場合、生産と消費の両方の負荷は、ブローカー間で多かれ少なかれ均等に分散されるはずなので、この機能はあまり役に立たないかもしれません.

メッセージの高速消費に集中し、ストレージ制限を増やして負荷のピークを滑らかにすると、おそらくより良い結果が得られるでしょう。

于 2013-05-23T08:00:35.730 に答える