首页 > 解决方案 > 如何跨微服务拥有通用 DTO 或实体

问题描述

假设我有 5 个不同的微服务。每个都使用一个通用 DTO,即 UserDTO.java 或实体 User.java。

如果所有人都可以访问这些 DTO,我想出了两种方法

  1. 将所有这些 DTO 放置在所有微服务中

  2. 要创建一个项目,说Project-commons并将所有常见的 DTO 保留在那里,然后在所有微服务中添加该项目的依赖项

我知道在微服务之间共享通用 DTO 会扼杀微服务的概念/原则,但我想知道还有其他可用的方法吗?

标签: javamicroservicesspring-cloud

解决方案


实际上,共享一个通用代码库并不会扼杀将更改隔离到一个微服务的概念/原则,只要您严格对该库进行版本控制。这样,一个微服务团队可以决定它需要共享库中的新功能,并且可以增加库的版本号并添加新功能。使用该库的现有微服务不会受到影响,直到它们独立决定开始使用该库的较新版本。

所以这就是我们所做的。我们有跨微服务共享的 jar 文件,但我们将这些 jar 文件的特定版本推送到 Nexus,并在每个微服务中按版本号引用这些 jar 文件。

请注意,此概念与依赖于第三方组件(如 Apache Commons 库)的两个微服务没有什么不同。仅仅因为 Apache 推出了新版本的库并不意味着任何人的二进制文件都会发生变化。依赖于该库的每个代码库都可以决定是否以及何时移动到新版本,而与另一个代码库可能使用的版本或库的最新版本无关。


推荐阅读