128.5. 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 は、後者のオプションで指定したインターフェイス上に動的プロキシーを作成し、インターフェイスハンドラーメソッドによって指定されたメッセージのみをリッスンします。SpecificEvent
インスタンスのみを処理する単一のメソッドを持つリスナーインターフェイスの例を以下に示します。
package com.example; public interface CustomListener { @Subscribe void eventReceived(SpecificEvent event); }
上記のリスナーは、次のようにエンドポイント定義で使用できます。
from("guava-eventbus:busName?listenerInterface=com.example.CustomListener").to("seda:queue");