第82章 Disruptor コンポーネント
Camel バージョン 2.12 から利用可能
中断者: コンポーネントは標準の SEDA コンポーネントよりもはるかに非同期 SEDA の動作を提供しますが、標準の SEDA で使用される ブロッキングキュー の代わりに Disruptor を使用します。または、以下を実行します。
Disruptor-vm: エンドポイントは、このコンポーネントによってサポートされ、標準の 仮想マシン の代替を提供します。SEDA コンポーネントと同様に、中断 者 のバッファーです。エンドポイントは 単一 の CamelContext 内でのみ表示され、永続性やリカバリーにはサポートは提供されません。break or-vm: エンドポイントのバッファーは CamelContext インスタンス全体の通信もサポートします。そのため、このメカニズムを使用して Web アプリケーション全体で通信できます( camel-disruptor.jar は system/boot クラスパスにあります)。
SEDA または VM コンポーネントで Disruptor コンポーネントを使用することを選択する主な利点は、プロデューサーとマルチキャストされたコンシューマー間またはマルチキャストされたコンシューマー間または同時コンシューマーの間で競合が高いユースケースのパフォーマンスです。このような場合、スループットが大幅に増大し、レイテンシーが削減されました。競合のないシナリオでのパフォーマンスは、SEDA および仮想マシンのコンポーネントと類似しています。
Disruptor は、可能な限り SEDA および仮想マシンコンポーネントの動作とオプションを模倣する意図と共に実装されます。それらの主な相違点は以下のとおりです。
- 使用されるバッファーは常にサイズでバインドされます(デフォルトは 1024 エクスチェンジ)。
- バッファーは常に書き込みされるため、Diruptor のデフォルト動作は例外をスローする代わりにバッファーが満杯になっている間ブロックされます。このデフォルトの動作はコンポーネントに設定できます(オプションを参照)。
- Disruptor enpoints は BrowsableEndpoint インターフェースを実装しません。そのため、現在 Disruptor のエクスチェンジを取得できず、エクスチェンジの量のみを取得することはできません。
- Disruptor では、コンシューマー(マルチキャストその他)を静的に設定する必要があります。コンシューマーの追加または削除には、Diruptor のすべての保留中のエクスチェンジを完全にフラッシュする必要があります。
- 再設定の結果として、Disruptor を介して送信されたデータは直接処理され、コンシューマーが 1 つ以上ある場合は 'gone' になり、結合後に公開される新しいエクスチェンジのみを取得するようになりました。
- 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>
82.1. URI 形式
disruptor:someName[?options]
または
disruptor-vm:someName[?options]
someName には、現在の CamelContext 内のエンドポイントを一意に識別する文字列を指定できます(または
disruptor-vm:の場合のコンテキスト全体で)。
以下の形式で URI にクエリーオプションを追加できます。
?option=value&option=value&…