【问题标题】:Axon - Event Handler Interceptor configurationAxon - 事件处理程序拦截器配置
【发布时间】:2019-11-25 15:26:11
【问题描述】:

我正在尝试定义我的“事件处理程序拦截器”, 我按照官方文档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;
    }
}

我做错了什么?

谢谢!

【问题讨论】:

    标签: java spring eventhandler axon


    【解决方案1】:

    幸运的是,这个问题相当简单(并且与 Axon 没有直接关系)。

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

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


    更新

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

    如果该处理组中没有事件处理组件,则不会将任何事件传递给它,因此不会通过MessageHandlerInterceptor 推送任何事件。

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

    【讨论】:

    • 现在我不再报错了,但是在发送事件时,没有被MyEventHandlerInterceptor拦截;你能告诉我我做错了什么吗?或者你能告诉我一个例子吗?谢谢。
    • 更新了我的回复,提供了您可能遗漏的更多指南。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    相关资源
    最近更新 更多