第84章 Disruptor コンポーネント
Camel バージョン 2.12 以降で利用可能
disruptor: コンポーネントは、標準の SEDA コンポーネントと同様に非同期 SEDA の動作を提供しますが、標準の SEDA で使用される BlockingQueue の代わりに Disruptor を使用します。または、次のようになります。
interruptor-vm: エンドポイントはこのコンポーネントでサポートされており、標準の 仮想マシン に代わるものを提供します。SEDA コンポーネントと同様に、ディスラプターのバッファー: エンドポイントは 単一の CamelContext 内でのみ表示され、永続性または回復のサポートは提供されません。また、disruptor-vm: エンドポイントのバッファーは、CamelContexts インスタンス間の通信をサポートするため、このメカニズムを使用して Web アプリケーション間で通信できます (camel-disruptor.jar が システム/ブート クラスパスにある場合)。
SEDA または仮想マシンコンポーネントよりも Disruptor コンポーネントを使用することを選択する主な利点は、プロデューサ間および/またはマルチキャストまたは同時コンシューマー間の競合が激しいユースケースでのパフォーマンスです。これらのケースでは、スループットの大幅な向上とレイテンシーの削減が観察されています。競合のないシナリオでのパフォーマンスは、SEDA および VM コンポーネントに匹敵します。
Disruptor は、SEDA および仮想マシンコンポーネントの動作とオプションを可能な限り模倣することを目的として実装されています。それらとの主な違いは次のとおりです。
- 使用されるバッファーのサイズは常に制限されています (デフォルトでは 1024 エクスチェンジ)。
- バッファーは常にバウンドしているため、Disruptor のデフォルトの動作は、例外を出力する代わりに、バッファーがいっぱいの間ブロックすることです。このデフォルトの動作は、コンポーネントで設定できます (オプションを参照)。
- Disruptor エンドポイントは BrowsableEndpoint インターフェイスを実装しません。そのため、現在 Disruptor にあるエクスチェンジは取得できず、エクスチェンジの量のみが取得されます。
- Disruptor は、そのコンシューマー (マルチキャストまたはその他) を静的に設定する必要があります。その場でコンシューマーを追加または削除するには、Disruptor で保留中のすべてのエクスチェンジを完全にフラッシュする必要があります。
- 再設定の結果: Disruptor 経由で送信されたデータは直接処理され、少なくとも 1 つのコンシューマーが存在する場合はなくなります。遅れて参加したユーザーは、参加した後に公開された新しいエクスチェンジのみを取得します。
- pollTimeout オプションは Disruptor コンポーネントではサポートされていません。
- プロデューサーが完全な Disruptor でブロックすると、スレッド割り込みに応答しません。
Maven ユーザーは、このコンポーネントの pom.xml
に以下の依存関係を追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-disruptor</artifactId> <version>x.x.x</version> <!-- use the same version as your Camel core version --> </dependency>
84.1. URI 形式
disruptor:someName[?options]
または
disruptor-vm:someName[?options]
someName は、現在の CamelContext 内 (またはコンテキスト全体) でエンドポイントを一意に識別する任意の文字列にすることができます。
disruptor-vm:)。
URI には、次の形式でクエリーオプションを追加できます。
?option=value&option=value&…