axon-consume事件

jm2pwxwz  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(327)

我定义了一个微服务:
会计管理服务
处理createaccountcommand
createaccountcommand射击accountcreatedevent
然后新帐户存储在mysql数据库中
axon服务器用于存储事件
现在我需要另一个microserviceb(连接到同一个axon服务器)来处理accountcreatedevent。

我能简单地说

@EventHandler
protected void on(AccountCreatedEvent event){
}

在第二个微服务b中(例如在聚合中)?我尝试这样做的前提是,事件存储在axon服务器中,我的第二个微服务会自动侦听发布的事件。不幸的是,它没有起作用。
microservice b如何订阅axon服务器中的事件(由accountmanagementservice发布)?

a0zr77ik

a0zr77ik1#

你即将面临的关键问题来自你的最后一句话:
我可以简单地将[insert code snippet]放在第二个微服务b中(例如在聚合中)吗?
嗯,是的,你可以简单地添加一个 @EventHandler 带注解的函数在常规组件中,而不是在聚合中。axon框架提供的聚合功能旨在成为一个命令模型。在实际使用cqr时使用。
这使得聚合成为可以单独处理命令消息的组件。
唯一的例外是,当您在混合中添加事件源时。在事件源时,您将根据给定的命令模型发布的事件来源化该命令模型。因此引入了 @EventSourcingHandler 聚合中带注解的函数将只处理源自它的事件。
要回到原来的问题,是的,你可以简单地说:

@EventHandler
protected void on(AccountCreatedEvent event){
    // My event handling operation
}

在(微型)服务b。但是,该方法不能驻留在聚合中。这是通过设计来遵循cqrs和事件源范式的。
不过,任何其他组件都可以。如果您将axon与spring相结合,那么只需将组件与事件处理函数结合就足够了。如果您不使用spring,那么您必须使用事件处理程序将组件注册到 Configurer 或者 EventProcessingConfigurer .
希望这能为你澄清一些事情。

相关问题