java - Axon - 事件处理程序拦截器配置

标签 java spring eventhandler 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 不直接相关)。

问题是您应该在 configureEventProcessing(Configurer) 方法上使用 @Autowired 而不是 @Bean。 方法上的 @Bean 注释将使其成为“Bean 创建方法”,而您只想绑定(bind)到自动配置来“进一步配置”事件处理器。

微调的最后一点是,您可以使用 EventProcessingConfigurer 作为参数,而不是使用 Configurer#eventProcessing 调用。这会稍微缩短您的代码。


更新

鉴于自动接线调整按预期工作,所提供的配置将有效。当然,它确实期望存在一个事件处理组件,该组件是 ""my-tracking-processor" 处理组的一部分。

如果该处理组中不存在事件处理组件,则不会向其传递任何事件,因此不会通过 MessageHandlerInterceptor 推送任何事件。

为事件处理组件指定处理组的一种快速简便的方法是在类级别添加 @ProcessingGroup 注释。

关于java - Axon - 事件处理程序拦截器配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59035109/

相关文章:

Java:枚举的不同返回类型

java - AIR native Android 扩展 - 始终返回空设备 ID

java - 不使用 Collection 方法对列表进行排序

java - 访问 TestRule 中的自定义注释

C++ - 如何在应用程序退出时执行命令?

java - Java 与 C# 中的事件处理

java - AudioClip 麻烦

java - 通过调用另一个bean的方法来创建bean

java - 如何使用 JSR 注释组从 bean 获取属性?

java.io.NotSerializedException : java. beans.EventHandler