Java 微服务共享对象

Java 微服务共享对象,java,shared-libraries,messaging,microservices,dry,Java,Shared Libraries,Messaging,Microservices,Dry,目前,我们正在从我们的整体构建一个面向微服务的应用程序 我们面临的问题是如何在服务之间发送和接收对象,同时保持服务的独立性 问题: 假设我们有一个事件服务和一个通知服务。EventService生成事件,将其序列化(json/java?),并在ActiveMQ主题上发布序列化对象。 正在侦听该特定主题的NotificationService接收序列化对象,并且必须对其进行反序列化,因此需要知道事件类 解决两个服务之间共享事件类的问题的好方法是什么? 我应该引入一个只包含事件类的新项目吗?我在这里

目前,我们正在从我们的整体构建一个面向微服务的应用程序

我们面临的问题是如何在服务之间发送和接收对象,同时保持服务的独立性

问题: 假设我们有一个事件服务和一个通知服务。EventService生成事件,将其序列化(json/java?),并在ActiveMQ主题上发布序列化对象。 正在侦听该特定主题的NotificationService接收序列化对象,并且必须对其进行反序列化,因此需要知道事件类

解决两个服务之间共享事件类的问题的好方法是什么? 我应该引入一个只包含事件类的新项目吗?我在这里看到的问题是,这可能导致两种情况:

  • 共享项目变得臃肿,包含的类将超过每个服务所需的类
  • 我将为每两个共享某种类型对象的服务提供一个额外的项目,这将导致服务数量不断增加的巨大开销

  • 遵循以下经验法则:

    对于企业应用程序和复杂对象,创建第三个项目(API项目),并将其作为依赖项在服务之间共享

    对于简单自描述性对象,请在您的每个服务中使用相同对象的“副本”;注意,这是强大的,因为POJO不需要相同


    我刚刚分享了示例代码

    “微服务宗教”表示没有依赖关系,因此一方可以在较新的版本中生成更多字段(以及这种引导文本格式序列化)。就我个人而言,你的想法很好,我可以称之为“协议”或“协议XYZ”的第三个项目(这违反了ms的宗教信仰)。问题:两个ms都将由独立小组开发?(“两个比萨饼团队”)独白并非完全邪恶。您可以在您的微服务之间共享一个API,主要包含POJO,这将有助于ActiveMQ topicEach服务内外的序列化/反序列化过程,并对JSON的内容有自己的解释。因此,他们将有自己的相关对象。如果JSON(即事件)的内容在服务之间具有相似的含义,那么我建议从设计层面来看耦合太紧。感谢您的回答,我们还没有在不同的团队中构建,因为我们的应用程序太单一。我认为API方法将导致我上面描述的类似问题@在思考解决方案时,我也想到了jr593,但我越深入这个方向,就越能看到另一块巨石出现。