Axon Framework:微服务应该共享事件吗?
Axon Framework: Should microservices share events?
我们正在将单体迁移到更分布式的,我们决定使用 AxonFramework。
在 Axon 中,由于消息是第一个 class 公民,您可以将它们建模为 POJO。
现在我想知道,既然一个事件可以由一个服务调度并监听任何其他服务,我们应该如何处理事件分发。
我的第一反应是将它们作为 JAR 文件打包到一个单独的项目中,但这违反了微服务的规则,即它们不应共享实现。
欢迎提出任何建议。
拥有某种形式的 'common' 模块绝对并不少见,尽管我个人会单独将 'common' 模块用于特定的应用程序。
我通常会说您应该将您的 commands/events/queries 视为您申请的 API。因此,与其他项目共享事件结构可能是有益的,但不是实际的 POJO 本身。例如,您可以考虑将 ProtoBuf 用于此用例,在 ProtoBuf 中描述了您的事件的模式。
另一件要考虑的事情是不要暴露你的整个 'event-API'。通常,您会有相当多的细粒度事件,这些事件是您环境中的其他(微)服务不感兴趣的。然而,总是有几个 'very important events',换句话说 'milestone events',其他人肯定有兴趣。
在某些情况下,这些里程碑事件不是您域中的直接 POJO,而是多个事件的累积。
因此,累积这些并发布另一个事件以通知其他服务的服务并不少见。累积这些细粒度的内部事件并发布里程碑事件作为对这些事件的响应通常更适合作为微服务架构中的事件-API。
以上就是为您提供的一些想法,希望它们能给您一些见解。
我想对你的问题给出一个明确的解决方案,但这样的答案总是隐藏在'it depends'.
后面
你是对的,"official"规则是不共享模型。所以如果你有分布式开发团队,我会坚持下去。
然而,当我有一些组件是解耦的,但由同一个团队或高交互的团队开发时,我倾向于不严格遵守...
我们正在将单体迁移到更分布式的,我们决定使用 AxonFramework。
在 Axon 中,由于消息是第一个 class 公民,您可以将它们建模为 POJO。
现在我想知道,既然一个事件可以由一个服务调度并监听任何其他服务,我们应该如何处理事件分发。
我的第一反应是将它们作为 JAR 文件打包到一个单独的项目中,但这违反了微服务的规则,即它们不应共享实现。
欢迎提出任何建议。
拥有某种形式的 'common' 模块绝对并不少见,尽管我个人会单独将 'common' 模块用于特定的应用程序。
我通常会说您应该将您的 commands/events/queries 视为您申请的 API。因此,与其他项目共享事件结构可能是有益的,但不是实际的 POJO 本身。例如,您可以考虑将 ProtoBuf 用于此用例,在 ProtoBuf 中描述了您的事件的模式。
另一件要考虑的事情是不要暴露你的整个 'event-API'。通常,您会有相当多的细粒度事件,这些事件是您环境中的其他(微)服务不感兴趣的。然而,总是有几个 'very important events',换句话说 'milestone events',其他人肯定有兴趣。 在某些情况下,这些里程碑事件不是您域中的直接 POJO,而是多个事件的累积。
因此,累积这些并发布另一个事件以通知其他服务的服务并不少见。累积这些细粒度的内部事件并发布里程碑事件作为对这些事件的响应通常更适合作为微服务架构中的事件-API。
以上就是为您提供的一些想法,希望它们能给您一些见解。 我想对你的问题给出一个明确的解决方案,但这样的答案总是隐藏在'it depends'.
后面你是对的,"official"规则是不共享模型。所以如果你有分布式开发团队,我会坚持下去。
然而,当我有一些组件是解耦的,但由同一个团队或高交互的团队开发时,我倾向于不严格遵守...