Axon 4.1.1中EventProcessingConfigurer注册ErrorHandler未生效问题
Axon 4.1.1自定义ErrorHandler未触发问题排查与解决
我之前也碰到过类似的问题,在Axon 4.1.x版本里,自定义错误处理器的注册逻辑确实有需要注意的细节。你现在的情况是:给SolrProjection处理组注册了实现ErrorHandler和ListenerInvocationErrorHandler的TestErrorHandler,但@EventHandler抛异常时,错误处理器的方法完全没执行。
问题根源
Axon 4.1.x中,ErrorHandler和ListenerInvocationErrorHandler的职责是明确分开的:
ErrorHandler负责处理事件处理器自身的内部错误,比如线程池故障、事件流读取失败这类底层问题ListenerInvocationErrorHandler才是专门用来捕获**@EventHandler方法执行时抛出的业务/运行时异常**
你的代码只通过registerErrorHandler()注册了前者,而处理@EventHandler异常的后者并没有被关联到目标处理组,所以控制台看不到预期的输出。
解决方案
你需要同时注册两个处理器接口,把TestErrorHandler同时关联到这两个配置项上,有两种方式可以实现:
方式一:分别注册两个处理器
直接在配置方法中同时调用registerErrorHandler()和registerListenerInvocationErrorHandler():
@Autowired public void configure(final EventProcessingConfigurer config) { TestErrorHandler testErrorHandler = new TestErrorHandler(); // 注册处理组的全局ErrorHandler config.registerErrorHandler("SolrProjection", configuration -> testErrorHandler); // 注册处理@EventHandler异常的ListenerInvocationErrorHandler config.registerListenerInvocationErrorHandler("SolrProjection", configuration -> testErrorHandler); }
方式二:通过Tracking处理器配置统一设置
如果你的SolrProjection使用的是默认的Tracking Event Processor(大部分场景都是),也可以通过配置处理器的方式一次性指定两个错误处理器:
@Autowired public void configure(final EventProcessingConfigurer config) { TestErrorHandler testErrorHandler = new TestErrorHandler(); config.registerTrackingEventProcessorConfiguration("SolrProjection", processorConfigurer -> TrackingEventProcessorConfiguration.forSingleThreadedProcessing() .listenerInvocationErrorHandler(testErrorHandler) .errorHandler(testErrorHandler) ); }
额外验证点
- 确认你的处理组没有被改成Subscribing Event Processor(默认是Tracking,除非你手动配置过)
- 检查是否有其他配置类或Bean覆盖了你的错误处理器注册逻辑
- 如果
TestErrorHandler需要依赖其他Spring Bean,记得把它声明为@Bean,而不是手动new(你当前的写法没问题,但如果后续加依赖的话需要调整)
版本说明
Axon 4.2及以上版本对错误处理器的逻辑做了优化,ErrorHandler会覆盖更多场景,但4.1.x版本必须分开注册这两个处理器才能生效。
内容的提问来源于stack exchange,提问作者sherring
相关产品推荐
相关产品推荐

