検索

121.4. DeadEvent に関する考慮事項

download PDF

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");
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.