8

Apache Camel は、スレッド プールを使用するための 2 つのソリューションを提供します。

from("seda:stageName?concurrentConsumers=5").process(...)

from("direct:stageName").thread(5).process(...)

知りたいのですが、2つのソリューションの違いは何ですか? 同じことを書いているのは2種類だけですか?ユースケースは何ですか?

4

2 に答える 2

10

SEDA コンポーネント

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

于 2013-10-22T10:28:15.280 に答える
-1

同時コンシューマ デフォルトでは、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 エンドポイントでメッセージを処理するスレッドの数を直接構成することもできます。

于 2019-04-09T02:36:16.653 に答える