Apache Camel は、スレッド プールを使用するための 2 つのソリューションを提供します。
from("seda:stageName?concurrentConsumers=5").process(...)
と
from("direct:stageName").thread(5).process(...)
知りたいのですが、2つのソリューションの違いは何ですか? 同じことを書いているのは2種類だけですか?ユースケースは何ですか?
Apache Camel は、スレッド プールを使用するための 2 つのソリューションを提供します。
from("seda:stageName?concurrentConsumers=5").process(...)
と
from("direct:stageName").thread(5).process(...)
知りたいのですが、2つのソリューションの違いは何ですか? 同じことを書いているのは2種類だけですか?ユースケースは何ですか?
はseda: component
、メッセージが BlockingQueue で交換され、コンシューマがプロデューサへの別のスレッドで呼び出されるように、非同期 SEDA 動作を提供します。
はdirect: component
、プロデューサがメッセージ交換を送信するときに、任意のコンシューマを直接、同期的に呼び出します。このエンドポイントは、既存のルートを接続するため、またはルーターと同じ JVM 内のクライアントがルートにアクセスする場合に使用できます。
スレッドプールは、負荷に応じて実行時に動的に増減できるプールであり、同時消費者は常に固定されています。
あなたの場合のように、
同時コンシューマーの場合- from("seda:stageName?concurrentConsumers=5").process(...)
スレッドプールの場合- from("direct:stageName").thread(5).process(...)
ここで、常に 5 つConcurrent Consumers
のスレッドを使用可能にしたい場合は を使用し、スレッドを負荷に応じて使用可能にしたい場合 (ただし 5 つ以下) を使用しますThread Pool
。
同時コンシューマ デフォルトでは、SEDA エンドポイントは単一のコンシューマ スレッドを使用しますが、コンシューマ スレッドを同時に使用するように設定できます。したがって、スレッドプールの代わりに次を使用できます。
from("seda:stageName?concurrentConsumers=5").process(...) 2 つの違いについては、スレッド プールは負荷に応じて実行時に動的に増減できることに注意してください。一方、同時コンシューマの数は常に修繕。
スレッドプール 次のような方法でスレッドプールを SEDA エンドポイントに追加することに注意してください。
from("セダ:ステージ名").スレッド(5).プロセス(...)
1 つは SEDA エンドポイントから、もう 1 つはスレッド プールのワークキューからの 2 つの BlockQueue で終わる可能性がありますが、これは望ましくない場合があります。代わりに、同期と非同期の両方でメッセージを処理できるスレッド プールを使用して Direct エンドポイントを構成することをお勧めします。例えば:
from("direct:stageName").thread(5).process(...)
また、concurrentConsumers オプションを使用して、SEDA エンドポイントでメッセージを処理するスレッドの数を直接構成することもできます。