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

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.