121.4. DeadEvent に関する考慮事項
Guava EventBus の設計によって生じる制限により、@Subscribe
メソッドでアノテーションが付けられたクラスを作成せずにリスナーが受け取るイベントクラスを指定できないことに注意してください。この制限は、eventClass
オプションが指定されたエンドポイントが実際にすべてのイベント(java.lang.Object
)をリッスンし、実行時にプログラム的に適切なメッセージをフィルターすることを意味します。以下は、Camel コードベースからの適切な抜粋を示しています。
@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
エンドポイントオプションを使用します。Camel は、後者 オプションで指定したインターフェース上で動的プロキシーを作成し、インターフェースハンドラーメソッドが指定するメッセージのみをリッスンします。以下は、特定のイベント
インスタンスのみを処理する単一のメソッドを持つリスナーインターフェースの例になります。
package com.example; public interface CustomListener { @Subscribe void eventReceived(SpecificEvent event); }
上記のリスナーは、以下のようにエンドポイント定義で使用できます。
from("guava-eventbus:busName?listenerInterface=com.example.CustomListener").to("seda:queue");