我使用 java 创建了两个微服务。我需要从服务 A 到服务 B 进行 REST api 调用。发送的数据将采用 JSON 格式。使用 jax-rs 我需要在这两个服务中创建实体类。
由于两个项目中的实体类相同。我可以吗
- 创建一个通用 jar 并用于我的所有实体/域对象?这会让我的微服务耦合更紧密吗?
- 我是否在两个微服务项目中创建相同的类?这仅仅意味着在两个项目中重复工作吗?
服务之间是否有更好的通信方式?
至于让两个微服务独立以及将来它们也独立,我也会复制代码。我们之前也遇到过完全相同的情况。几个微服务似乎使用一些“通用”类,可以将它们放入单独的 jar 中。
最终我们出现了以下情况:
- 使用相同 JAR 的多个 (5+) 服务
- 事实证明,我们认为相同的类在不同的服务中似乎具有稍微不同的语义
- 在发布时,其中一个类的更改或多或少迫使我们对每个微服务进行发布(这里不再具有独立性)
- 开发人员往往会在任何地方看到“常见”行为,因此您很可能最终会得到一些“帮助器/实用程序”类,同时这在 OOP 中被认为是代码味道
长话短说,与此同时,我们转而复制代码,这使我们能够自由地真正独立地处理我们的微服务,因为我们只需要遵守服务合同。内部发生的事情完全取决于服务,我们不必在迭代结束时发布所有服务。我并不是说另一个选择是错误的,但事实证明它不适合我们。如果您确实看到两个服务之间的公共类,并且您确信您的公共库不会与其他垃圾混淆,那么您就可以保存了。
EDIT
也许作为后续,我们对在一些公共类中共享测试代码的测试(单元和集成)进行了相同的讨论。最后,这简直就是地狱,因为代码或验收标准的每一个微小变化都会导致 50% 的测试失败。同时,我们的策略是不在测试级别共享任何内容,并在测试地点确保一切正常。这样您就可以非常快地消除或更改测试。最后,我们得到的教训是保持业务代码尽可能干净和优雅,并以尽可能少让我们头疼的方式保持测试代码。
Edit2同时,我们使用开放 API 规范定义所有 REST 接口,并创建通过 maven 插件 openapi-generator 交换的实际 DTO 对象。该规范驻留在实现该接口的项目中,并将其发布到artifactory。实现客户端的项目会提取它并基于它创建 DTO。这样,您就拥有了单点事实,无需编写 DTO 样板代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)