1

ハンドラーを登録解除しようとすると、Guava eventBus から次のエラーが発生します。

java.lang.IllegalArgumentException: missing event handler for an annotated method. Is [DerivedClass] registered?" at com.google.common.eventbus.EventBus.unregister(EventBus.java:227)

すでに回答済みの同じ質問がありますが、根本的な原因はクライアントのコーディング エラーでした。私の場合、私はすべてを非常に単純に行っていますが、それでも問題が発生しています。

クライアント コードは、複数のスレッド (この場合は 2 つだけ) で実行される Apache Camel Processor Bean です。eventBus はスレッドセーフになるように設計されていますが、エラーが発生するのはトラフィックが多いときだけであり、数千回の呼び出し後に発生したのは数回だけです。

ハンドラー インスタンスは Camel Exchange を格納するだけであり、構築が失敗するとすぐに失敗します。

public void process(Exchange exchange) throws Exception {
    MyHandler evHandler = new MyHandler(exchange);
    eventBus.register(evHandler);

    try {
        doStuff(exchange);
    }
    catch (Foo bar) {
        // stuff
    }
    finally {
        eventBus.unregister(evHandler);
    }
}
4

1 に答える 1