Axon 如何添加事件 listener/interceptor 以在事件到达其处理程序之前拦截事件?
Axon How can I add an event listener/interceptor to intercept events before they reach their handlers?
我有一个投影 class(构建一个读取模型),我想为其事件添加一个拦截器,如果事件中传递的 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 的接口,但我不确定如何使用它,我不确定这是否会拦截我的所有事件,或者我是否能够拦截 select 个事件。
官方文档中没有提到这个接口(没有实际示例)
你说得对,参考指南仍然需要一些改进@bleh10 - 我可以向你保证,他们正在努力,团队只是相对分散。
在没有追捧的例子的情况下,我想我可以给你一些指导。
您正在寻找的是 MessageHandlerInterceptor
实现,专门针对 EventMessage
类型。顾名思义,它会在处理消息之前拦截消息,这与您提出的问题完全一致。
其次,您显然需要一个地方来配置这些。在 Axon 应用程序中,将事件传递给 @EventHandler
注释方法的技术方面是事件处理器。因此,它负责确保流经它的事件消息按需要被拦截。
因此,配置 EventMessage
MessageHandlerInterceptor
的位置在您选择的 EventProcessor
实现上。为确保给定的事件处理组件在特定的 EventProcessor
中设置,您可以通过使用 @ProcessingGroup
注释对 class 进行注释来指定它的处理组。
从那时起,您可以使用 EventProcessingConfigurer
轻松地为您的事件处理器配置特定属性。更具体地说,我建议为此使用 EventProcessingConfigurer#registerHandlerInterceptor(String, Function<Configuration, MessageHandlerInterceptor<? super EventMessage<?>>>)
方法。
第一个 String
参数用于描述您的处理组的名称。第二个是 Function
接收 Axon Configuration
并且应该输出 MessageHandlerInterceptor
可以处理 EventMessage
class.
希望对您有所帮助!
我有一个投影 class(构建一个读取模型),我想为其事件添加一个拦截器,如果事件中传递的 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 的接口,但我不确定如何使用它,我不确定这是否会拦截我的所有事件,或者我是否能够拦截 select 个事件。
官方文档中没有提到这个接口(没有实际示例)
你说得对,参考指南仍然需要一些改进@bleh10 - 我可以向你保证,他们正在努力,团队只是相对分散。
在没有追捧的例子的情况下,我想我可以给你一些指导。
您正在寻找的是 MessageHandlerInterceptor
实现,专门针对 EventMessage
类型。顾名思义,它会在处理消息之前拦截消息,这与您提出的问题完全一致。
其次,您显然需要一个地方来配置这些。在 Axon 应用程序中,将事件传递给 @EventHandler
注释方法的技术方面是事件处理器。因此,它负责确保流经它的事件消息按需要被拦截。
因此,配置 EventMessage
MessageHandlerInterceptor
的位置在您选择的 EventProcessor
实现上。为确保给定的事件处理组件在特定的 EventProcessor
中设置,您可以通过使用 @ProcessingGroup
注释对 class 进行注释来指定它的处理组。
从那时起,您可以使用 EventProcessingConfigurer
轻松地为您的事件处理器配置特定属性。更具体地说,我建议为此使用 EventProcessingConfigurer#registerHandlerInterceptor(String, Function<Configuration, MessageHandlerInterceptor<? super EventMessage<?>>>)
方法。
第一个 String
参数用于描述您的处理组的名称。第二个是 Function
接收 Axon Configuration
并且应该输出 MessageHandlerInterceptor
可以处理 EventMessage
class.
希望对您有所帮助!