尝试注销处理程序时,我从 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)
已经回答了一个相同的问题,但根本原因是客户端编码错误。就我而言,我所做的一切都非常简单,但仍然遇到了问题。
客户端代码是一个 Apache Camel 处理器 bean,它使用多个线程(在这种情况下只有 2 个)运行。尽管 eventBus 被设计为线程安全的,但该错误仅在高流量时才出现,并且仅在 1000 次调用后才出现几次。
处理程序实例只存储骆驼交换,如果构造失败,我们会很快失败。
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);
}
}