1

ActiveMQ は初めてです。私はそれ (および Apache Camel) を、最終的に Web サービスと通信するバッチ処理に使用しています。

私の質問は、ActiveMQ が実際の非同期性をどのように制御するかです。つまり、同時に 20 個のメッセージを処理できるが、ボトルネックが相手側の Web サービスである場合、どうすればそれを制御できるでしょうか? ActiveMQ を遅くすることはできますか?

ありがとう!

4

3 に答える 3

2

キャメルスロットルは良い解決策です。ただし、その時点で Camel アプリケーションのメモリにメッセージを保持します。しかし、それは正確に反応することを可能にします。

もう 1 つの代替手段は、Camel ActiveMQ JMS コンシューマーで構成できるスロットル中のルート ポリシーです。そのポリシーは、上限/下限のウォーターマーク設定で構成できます。その後、ポリシーはそれに応じて AMQ コンシューマーを自動的に一時停止/再開します。このロジックを拡張して、代わりにカスタム メトリックを使用できます。

このポリシーについては、http: //camel.apache.org/routepolicyで読むことができます。

このアプローチでは、AMQ コンシューマー側でメッセージを一時停止/再開してフローを「スロットル」するように制御するため、メッセージはメモリに保持されません。

于 2012-08-26T07:28:39.633 に答える
2

apache camel 2.4+ を使用している場合は、camel でスロットルを使用して、エンドポイントへのメッセージ フローを制御できます。camel 2.8 以降、制限を動的に変更できます。お役に立てば幸いです。

于 2012-08-24T15:33:40.113 に答える
0

クライアントから返された message_delivered 応答の量に基づいて、AMQ が特定のトランスポートでメッセージをコンシューマにディスパッチしないように、プリフェッチ制限を設定することもできます。ここに参照があります

于 2016-04-04T18:09:02.833 に答える