Fuse 6 is no longer supported
As of February 2025, Red Hat Fuse 6 is no longer supported. If you are using Fuse 6, please upgrade to Red Hat build of Apache Camel.第62章 Guava EventBus
Guava EventBus コンポーネント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.10.0 以降で利用可能
Google Guava EventBus は、コンポーネントを相互に明示的に登録しなくても、コンポーネント間のパブリッシュ/サブスクライブスタイルの通信を可能にします(そのため、相互に認識する必要があります)。guava-eventbus: コンポーネントは、Camel と Google Guava EventBus インフラストラクチャー間の統合ブリッジを提供します。後者のコンポーネントでは、Guava
EventBus
で交換されるメッセージは、Camel ルートに透過的に転送できます。EventBus コンポーネントを使用すると、Camel エクスチェンジのボディーを Guava EventBus
にルーティングすることもできます。
Maven ユーザーは、このコンポーネントの
pom.xml
に以下の依存関係を追加する必要があります。
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
guava-eventbus:busName[?options]
guava-eventbus:busName[?options]
busName は、Camel レジストリーにある
com.google.common.eventbus.EventBus
インスタンスの名前を表します。
オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
名前 | デフォルト値 | 説明 |
---|---|---|
eventClass
|
null
|
Camel 2.10: ルートのコンシューマー側で使用された場合、は EventBus から受信したイベントを、eventClass の クラスおよびスーパークラス にフィルターします。このオプションの null 値は、これを java.lang.Object に設定するのと同じです。つまり、コンシューマーはイベントバスに受信するすべてのメッセージを取得します。このオプションは listenerInterface オプションと併用できません。
|
listenerInterface
|
null
|
Camel 2.11: @Subscribe アノテーションが付けられたメソッドを持つインターフェイス。動的プロキシーはインターフェイスで作成され、EventBus リスナーとして登録できるようにします。特に、マルチイベントリスナーを作成し、DeadEvent を適切に処理する際に役立ちます。このオプションは eventClass オプションと併用できません。
|
使用方法 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ルートのコンシューマー側で
guava-eventbus
コンポーネントを使用すると、Guava EventBus
に送信されたメッセージをキャプチャーし、Camel ルートに転送します。Guava EventBus コンシューマーは受信メッセージを 非同期的 に処理します。
ルートのプロデューサー側で
guava-eventbus
コンポーネントを使用すると、Camel エクスチェンジのボディーが Guava EventBus
インスタンスに転送されます。
DeadEvent に関する考慮事項 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Guava EventBus の設計によって生じる制限により、
@Subscribe
メソッドでアノテーションが付けられたクラスを作成せずにリスナーによって受信されるイベントクラスを指定できないことに注意してください。この制限は、eventClass
オプションが指定されたエンドポイントが可能なすべてのイベント(java.lang.Object
)をリッスンし、ランタイム時に適切なメッセージをプログラムでフィルターすることを意味します。以下のスニッシングは、Camel コードベースからの適切な抜粋を示しています。
@Subscribe public void eventReceived(Object event) { if (eventClass == null || eventClass.isAssignableFrom(event.getClass())) { doEventReceived(event); ...
@Subscribe
public void eventReceived(Object event) {
if (eventClass == null || eventClass.isAssignableFrom(event.getClass())) {
doEventReceived(event);
...
このアプローチの欠点は、Camel が使用する
EventBus
インスタンスが com.google.common.eventbus.DeadEvent
通知を生成しないことです。Camel が正確に指定されたイベントのみをリッスンするようにするには(そのため、DeadEvent
サポートを有効にする)、listenerInterface
endpoint オプションを使用します。Camel は、後者のオプションで指定したインターフェイスで動的プロキシーを作成し、インターフェイスハンドラーメソッドによって指定されたメッセージのみをリッスンします。SpecificEvent
インスタンスのみを処理する単一のメソッドインターフェイスの例を以下に示します。
上記のリスナーは、以下のようにエンドポイント定義で使用できます。
from("guava-eventbus:busName?listenerInterface=com.example.CustomListener").to("seda:queue");
from("guava-eventbus:busName?listenerInterface=com.example.CustomListener").to("seda:queue");
複数のタイプのイベントの使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Guava EventBus コンシューマーが消費する複数のタイプのイベントを定義するには、リスナーインターフェイスが
@Subscribe
アノテーションが付けられた複数のメソッドを提供できるため、listenerInterface
エンドポイントオプションを使用します。
上記のリスナーは、以下のようにエンドポイント定義で使用できます。
from("guava-eventbus:busName?listenerInterface=com.example.MultipleEventsListener").to("seda:queue");
from("guava-eventbus:busName?listenerInterface=com.example.MultipleEventsListener").to("seda:queue");