Axon Framework:微服务应该共享事件吗?

Mar*_*hel 2 axon

我们正在将单片机迁移到更分散的分区,我们决定使用AxonFramework.

在Axon中,由于消息是一等公民,因此您可以将它们建模为POJO.

现在我想知道,因为一个服务可以调度一个事件并监听任何其他服务,我们应该如何处理事件分发.

我的第一个冲动是将它们作为JAR文件打包在一个单独的项目中,但这违反了微服务的规则,它们不应该共享实现.

任何建议都是受欢迎的.

Ste*_*ven 5

拥有某种形式的"通用"模块绝对并不罕见,尽管我个人仅将该"通用"模块用于该特定应用程序.

我通常会说你应该将你的命令/事件/查询视为你的应用程序的API.因此,与其他项目共享事件结构可能是有益的,但实际上不是POJO本身.例如,您可以考虑将ProtoBuf用于此用例,ProtoBuf中描述了您的事件的架构.

另一件需要考虑的事情是不要暴露你的整个'event-API'.通常情况下,你会有一些细粒度的事件,你的环境中其他(微)服务不感兴趣的东西.但总有一些"非常重要的事件",不同的是"里程碑事件",其他人肯定是在某些情况下,这些里程碑事件不是来自您的域的直接POJO,而是几个事件的累积.

因此,具有累积这些并发布另一事件以通知其他服务的服务并不罕见.积累这些细粒度的内部事件,并发布里程碑事件作为对这些事件的响应通常更适合作为微服务架构中的事件API.

所以这里有一些想法,希望他们能给你一些见解.我想为你的问题提供一个明确的解决方案,但这样的答案总是隐藏在"它取决于"之后.