我有一个投影类(用于构建读取模型),我想为其事件添加拦截器,其方式是,如果事件中传递的id导致空对象(我的数据库中不存在),则我想阻止它,否则让它通过。
这样,我将在每个事件处理程序上避免添加null检查器。
@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();
}
}
我发现轴突提供了一个名为EventListener的接口,但我不确定如何使用它,也不确定是否会截获所有事件或是否能够截获我的事件选择事件。
除了官方文档(没有任何实际示例)之外,此界面没有任何提及
答案 0 :(得分:0)
您是正确的,《参考指南》仍然需要一些改进@ bleh10-我可以向您保证,他们正在研究中,团队规模相对较小。
在没有受到追捧的例子的情况下,我想我可以为您提供一些指导。
您要寻找的是MessageHandlerInterceptor
实现,特别是针对EventMessage
类型的实现。顾名思义,它会在处理之前拦截邮件,这与您提出的问题完全吻合。
第二,您显然需要一个位置来配置它们。在Axon应用程序中,将事件传递到您的@EventHandler
注释方法的技术方面是事件处理器。因此,它负责确保流经它的事件消息被按需拦截。
因此,配置EventMessage
MessageHandlerInterceptor
的位置位于您选择的EventProcessor
实现上。为了确保在特定的EventProcessor
中设置了给定的事件处理组件,您可以通过使用@ProcessingGroup
注释对该类进行注释来指定其为处理组。
从那时起,您可以利用EventProcessingConfigurer
轻松地为事件处理器配置特定属性。更具体地说,我建议为此使用EventProcessingConfigurer#registerHandlerInterceptor(String, Function<Configuration, MessageHandlerInterceptor<? super EventMessage<?>>>)
方法。
第一个String
参数用于描述处理组的名称。第二个是Function
,它接收轴突Configuration
,并应该输出可以处理MessageHandlerInterceptor
类的EventMessage
。
希望这对您有所帮助!