如何在两个微服务之间的REST服务之间共享实体?

我用java创建了两个微服务。 我需要从服务A到服务B进行REST api调用。发送的数据将采用JSON格式。 使用jax-rs我需要在服务中创建实体类。

由于两个实体类在两个项目中都相同。 我

  • 创建一个公共jar并使用is for我的所有实体/域对象? 这是否使我的微服务更紧密耦合?
  • 我是否在微服务项目中创建了相同的类? 这只意味着重复两个项目的工作?

是否有更好的方式在服务之间进行通信?

在让您的两个微服务独立并且将来也使它们独立的同时,我也会复制代码。 我们之前有过完全相同的情况。 几个微服务似乎使用了一些可以放在单独jar中的“常用”类。 最后我们遇到以下情况: – 使用相同JAR的几个(5+)服务 – 结果我们认为相同的类似乎在不同的服务中具有稍微不同的语义 – 更改其中一个类或者更少强迫我们在每个微服务上发布一个版本,当它发布时(这里没有独立性) – 开发人员往往会看到“共同”的行为,所以你最有可能在那里找到一些“助手/实用程序”类同时被认为是OOP中的代码气味

长话短说,与此同时我们切换到代码重复,这让我们可以自由地独立处理我们的mircoservices,因为我们只需要坚持服务合同。 内部发生的事情完全取决于服务,我们不必在迭代结束时释放所有服务。 我不是说另一种选择是错误的,但事实certificate它不适合我们。 如果你真的看到两个服务之间的公共类,并且你确定你不会把你的公共库搞砸了其他废话,你的保存去吧。

编辑

也许作为后续行动,我们对在一些常见类中具有共享测试代码的测试(单元和集成)进行了相同的讨论。 最后这是地狱,因为代码或验收标准的每一个细微变化都使50%的测试失败。 与此同时,我们的策略是不在测试级别上共享任何内容,并在测试位置拥有一切。 通过这种方式,您可以非常快速地消除或更改测试。 最后,我们的教训是保持业务代码的清洁和优雅,并使测试代码尽可能让我们头疼。

这是我们作为开发人员感到困惑的常见情况。 我建议有一个可以在微服务(A和B)中使用的通用jar(共享)。 当我们使用第三方库时,它只是共享第三个资源。 在我目前的项目中,我们处于相同的情况,我们找到了最好的方法来建立单独的共享库( api-shared as name),并在不同的微服务中将其作为jar使用。

在您的第二种方法中,您最终得到了冗余代码,并且难以维护。 让我们假设如果您对实体有任何更改,那么您必须更改两个实体,这不是同步事物的好方法。

总而言之,我建议你为两个微服务使用共享jar。

问候

TECHNO

我会说这取决于具体情况。 如果使用共享包,则会在两个项目之间引入耦合。 这是有道理的,如果两个项目都在相同的数据类上构建,因此将使用相同的dto对象。 理想情况下,您将拥有自己的nexus,这简化了共享人工制品的使用。 否则,如果只有少数类是冗余的,我可能会分别在每个服务中实现它,这也将它们分离。

我担心您需要为您的项目确定哪个是正确的解决方案。