第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 に以下の依存関係を追加する必要があります。
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-guava-eventbus</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
Copy to Clipboard Toggle word wrap

URI 形式

guava-eventbus:busName[?options]
Copy to Clipboard Toggle word wrap
busName は、Camel レジストリーにある com.google.common.eventbus.EventBus インスタンスの名前を表します。

オプション

Expand
名前 デフォルト値 説明
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 コンシューマーは受信メッセージを 非同期的 に処理します。
SimpleRegistry registry = new SimpleRegistry();
EventBus eventBus = new EventBus();
registry.put("busName", eventBus);
CamelContext camel = new DefaultCamelContext(registry);

from("guava-eventbus:busName").to("seda:queue");

eventBus.post("Send me to the SEDA queue.");
Copy to Clipboard Toggle word wrap
ルートのプロデューサー側で guava-eventbus コンポーネントを使用すると、Camel エクスチェンジのボディーが Guava EventBus インスタンスに転送されます。
SimpleRegistry registry = new SimpleRegistry();
EventBus eventBus = new EventBus();
registry.put("busName", eventBus);
CamelContext camel = new DefaultCamelContext(registry);

from("direct:start").to("guava-eventbus:busName");

ProducerTemplate producerTemplate = camel.createProducerTemplate();
producer.sendBody("direct:start", "Send me to the Guava EventBus.");

eventBus.register(new Object(){
  @Subscribe
  public void messageHander(String message) {
    System.out.println("Message received from the Camel: " + message);
  }
});
Copy to Clipboard Toggle word wrap

DeadEvent に関する考慮事項

Guava EventBus の設計によって生じる制限により、@Subscribe メソッドでアノテーションが付けられたクラスを作成せずにリスナーによって受信されるイベントクラスを指定できないことに注意してください。この制限は、eventClass オプションが指定されたエンドポイントが可能なすべてのイベント(java.lang.Object)をリッスンし、ランタイム時に適切なメッセージをプログラムでフィルターすることを意味します。以下のスニッシングは、Camel コードベースからの適切な抜粋を示しています。
@Subscribe
public void eventReceived(Object event) {
  if (eventClass == null || eventClass.isAssignableFrom(event.getClass())) {
    doEventReceived(event);
...
Copy to Clipboard Toggle word wrap
このアプローチの欠点は、Camel が使用する EventBus インスタンスが com.google.common.eventbus.DeadEvent 通知を生成しないことです。Camel が正確に指定されたイベントのみをリッスンするようにするには(そのため、DeadEvent サポートを有効にする)、listenerInterface endpoint オプションを使用します。Camel は、後者のオプションで指定したインターフェイスで動的プロキシーを作成し、インターフェイスハンドラーメソッドによって指定されたメッセージのみをリッスンします。SpecificEvent インスタンスのみを処理する単一のメソッドインターフェイスの例を以下に示します。
package com.example;

public interface CustomListener {

  @Subscribe
  void eventReceived(SpecificEvent event);

}
Copy to Clipboard Toggle word wrap
上記のリスナーは、以下のようにエンドポイント定義で使用できます。
from("guava-eventbus:busName?listenerInterface=com.example.CustomListener").to("seda:queue");
Copy to Clipboard Toggle word wrap

複数のタイプのイベントの使用

Guava EventBus コンシューマーが消費する複数のタイプのイベントを定義するには、リスナーインターフェイスが @Subscribe アノテーションが付けられた複数のメソッドを提供できるため、listenerInterface エンドポイントオプションを使用します。
package com.example;

public interface MultipleEventsListener {

  @Subscribe
  void someEventReceived(SomeEvent event);

  @Subscribe
  void anotherEventReceived(AnotherEvent event);

}
Copy to Clipboard Toggle word wrap
上記のリスナーは、以下のようにエンドポイント定義で使用できます。
from("guava-eventbus:busName?listenerInterface=com.example.MultipleEventsListener").to("seda:queue");
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat