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");