【问题标题】:Axon How can I add an event listener/interceptor to intercept events before they reach their handlers?Axon 如何添加事件侦听器/拦截器以在事件到达其处理程序之前对其进行拦截?
【发布时间】:2019-05-22 09:46:59
【问题描述】:

我有一个投影类(用于构建读取模型),我想为其事件添加一个拦截器,如果事件中传递的 id 导致一个空对象(我的数据库中不存在),那么我要阻止它,否则让它过去。

这样我就可以避免在每个事件处理程序上添加一个空检查器。

@EventHandler
public void onEvent(Event event) {
    Entity entity = getEntity(event.getId());
    if(entity!=null){        // what I don't want to add on every event handler
        dostuff();
    }
}

我发现 axon 提供了一个名为 EventListener 的接口,但我不确定如何使用它,我不确定这是否会拦截我的所有事件或者我是否能够拦截选择事件.

除了官方文档中没有提到这个接口的任何地方(没有实际的例子左右)

【问题讨论】:

    标签: spring domain-driven-design interceptor event-sourcing axon


    【解决方案1】:

    你说得对,参考指南仍然需要一些改进 @bleh10 - 我可以向你保证,他们正在努力,团队只是分散得相对薄弱。

    在没有广受欢迎的例子的情况下,我想我可以给你一些指导。

    您正在寻找的是一个MessageHandlerInterceptor 实现,专门用于EventMessage 类型。顾名思义,它会在处理之前拦截消息,这与您提出的问题完美对应。

    其次,您显然需要一个地方来配置这些。在 Axon 应用程序中,将事件传递给 @EventHandler 注释方法的技术方面是事件处理器。因此,它负责确保根据需要拦截流经它的事件消息。

    因此,配置EventMessage MessageHandlerInterceptor 的位置在您选择的EventProcessor 实现上。为确保给定的事件处理组件设置在特定的 EventProcessor 中,您可以通过使用 @ProcessingGroup 注释对类进行注释来指定它的处理组。

    从那里开始,您可以使用EventProcessingConfigurer 轻松配置事件处理器的特定属性。更具体地说,我建议为此使用EventProcessingConfigurer#registerHandlerInterceptor(String, Function<Configuration, MessageHandlerInterceptor<? super EventMessage<?>>>) 方法。

    第一个String 参数用于描述处理组的名称。第二个是Function,它接收Axon Configuration,应该输出一个MessageHandlerInterceptor,它可以处理EventMessage类。

    希望对你有所帮助!

    【讨论】:

    • 抱歉回复晚了,终于有时间试用了,效果不错。可悲的是,设置 @processingGroup 导致轴突回复导致一些问题的事件
    • 不用担心@bleh10,很高兴它最终解决了问题。真可惜,我应该警告过你的。从技术上讲,改变处理组,尤其是一个新的,让我们引入一个全新的跟踪事件处理器的框架,默认情况下将从流的头部开始......如果你可以更改跟踪令牌的开始位置顺便想通过TrackingEventProcessorConfiguration#andInitialTrackingToken()。提供的函数中的StreamableMessageSource 可用于创建头部或尾部令牌。希望这会有所帮助!
    • 感谢您一如既往的快速回复,一切正常,一切正常。如果我们以后需要,我会记住这个选项!
    • 别担心,我很乐意为您提供帮助! :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 2011-06-20
    相关资源
    最近更新 更多