ActiveMQ は初めてです。私はそれ (および Apache Camel) を、最終的に Web サービスと通信するバッチ処理に使用しています。
私の質問は、ActiveMQ が実際の非同期性をどのように制御するかです。つまり、同時に 20 個のメッセージを処理できるが、ボトルネックが相手側の Web サービスである場合、どうすればそれを制御できるでしょうか? ActiveMQ を遅くすることはできますか?
ありがとう!
ActiveMQ は初めてです。私はそれ (および Apache Camel) を、最終的に Web サービスと通信するバッチ処理に使用しています。
私の質問は、ActiveMQ が実際の非同期性をどのように制御するかです。つまり、同時に 20 個のメッセージを処理できるが、ボトルネックが相手側の Web サービスである場合、どうすればそれを制御できるでしょうか? ActiveMQ を遅くすることはできますか?
ありがとう!
キャメルスロットルは良い解決策です。ただし、その時点で Camel アプリケーションのメモリにメッセージを保持します。しかし、それは正確に反応することを可能にします。
もう 1 つの代替手段は、Camel ActiveMQ JMS コンシューマーで構成できるスロットル中のルート ポリシーです。そのポリシーは、上限/下限のウォーターマーク設定で構成できます。その後、ポリシーはそれに応じて AMQ コンシューマーを自動的に一時停止/再開します。このロジックを拡張して、代わりにカスタム メトリックを使用できます。
このポリシーについては、http: //camel.apache.org/routepolicyで読むことができます。
このアプローチでは、AMQ コンシューマー側でメッセージを一時停止/再開してフローを「スロットル」するように制御するため、メッセージはメモリに保持されません。
apache camel 2.4+ を使用している場合は、camel でスロットルを使用して、エンドポイントへのメッセージ フローを制御できます。camel 2.8 以降、制限を動的に変更できます。お役に立てば幸いです。
クライアントから返された message_delivered 応答の量に基づいて、AMQ が特定のトランスポートでメッセージをコンシューマにディスパッチしないように、プリフェッチ制限を設定することもできます。ここに参照があります