java - Axon - 事件处理程序拦截器配置
问题描述
我正在尝试定义我的“事件处理程序拦截器”,我按照官方文档here的说明进行操作,但出现以下错误:
org.springframework.beans.factory.BeanCreationException: error when creating the bean with name 'configureEventProcessing' defined in the resource path class [com / prog / boot / config / EventProcessorConfiguration.class]: invalid factory method 'configureEventProcessing': must have an empty non-return type!
我当前的配置调用:
@Configuration
public class EventProcessorConfiguration {
@Bean
public void configureEventProcessing(Configurer configurer) {
configurer.eventProcessing()
.registerTrackingEventProcessor("my-tracking-processor")
.registerHandlerInterceptor("my-tracking-processor",
configuration -> new MyEventHandlerInterceptor());
}
}
我的活动MessageHandlerInterceptor
实现:
public class MyEventHandlerInterceptor implements MessageHandlerInterceptor<EventMessage<?>> {
@Override
public Object handle(UnitOfWork<? extends EventMessage<?>> unitOfWork, InterceptorChain interceptorChain)
throws Exception {
EventMessage<?> event = unitOfWork.getMessage();
String userId = Optional.ofNullable(event.getMetaData().get("userId")).map(uId -> (String) uId)
.orElseThrow(Exception::new);
if ("axonUser".equals(userId)) {
return interceptorChain.proceed();
}
return null;
}
}
我究竟做错了什么?
谢谢!
解决方案
幸运的是,这个问题相当简单(并且与 Axon 没有直接关系)。
问题是你应该使用而@Autowired
不是方法。方法上的注释将使其成为“Bean 创建方法”,而您只想绑定到自动配置以“进一步配置”事件处理器。@Bean
configureEventProcessing(Configurer)
@Bean
微调的最后说明,您可以使用EventProcessingConfigurer
作为参数而不是Configurer#eventProcessing
调用。这会稍微缩短您的代码。
更新
鉴于自动布线调整按预期工作,所提供的配置将。当然,它确实希望存在一个事件处理组件,它是""my-tracking-processor"
处理组的一部分。
如果该处理组中不存在事件处理组件,则不会将任何事件传递给它,因此不会通过MessageHandlerInterceptor
.
为事件处理组件指定处理组的一种快速简便的方法是@ProcessingGroup
在类级别添加注释。
推荐阅读
- php - 我是 Vue.js 的新手,尝试理解 vue-socket.io 但失败了
- c++ - 简单的 Windows 10 UDP 广播发送和接收不起作用
- html - 大小不适用于使用引导程序的图像
- python - 如何检查属于可变大小行块的多行上的多个条件并返回主行
- android - 在 React Native 中设置第一个项目
- python - python中的跟踪函数
- node.js - 如何使用excel4node在excel表格中写入数组
- python - 合并 pandas df 时出错。TypeError:(“'float'类型的对象没有len()”,'发生在索引D')
- javascript - 无法获取元素的属性
- xcode - 将 Xcode 项目 (Xcode 9) 添加到 Subversion (SVN)