1
當我試圖註銷處理程序時,從Guava事件總線中收到以下錯誤。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 Processor 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);
}
}