ハンドラーを登録解除しようとすると、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);
}
}