java - 如何跨微服务拥有通用 DTO 或实体
问题描述
假设我有 5 个不同的微服务。每个都使用一个通用 DTO,即 UserDTO.java 或实体 User.java。
如果所有人都可以访问这些 DTO,我想出了两种方法
将所有这些 DTO 放置在所有微服务中
要创建一个项目,说Project-commons并将所有常见的 DTO 保留在那里,然后在所有微服务中添加该项目的依赖项
我知道在微服务之间共享通用 DTO 会扼杀微服务的概念/原则,但我想知道还有其他可用的方法吗?
解决方案
实际上,共享一个通用代码库并不会扼杀将更改隔离到一个微服务的概念/原则,只要您严格对该库进行版本控制。这样,一个微服务团队可以决定它需要共享库中的新功能,并且可以增加库的版本号并添加新功能。使用该库的现有微服务不会受到影响,直到它们独立决定开始使用该库的较新版本。
所以这就是我们所做的。我们有跨微服务共享的 jar 文件,但我们将这些 jar 文件的特定版本推送到 Nexus,并在每个微服务中按版本号引用这些 jar 文件。
请注意,此概念与依赖于第三方组件(如 Apache Commons 库)的两个微服务没有什么不同。仅仅因为 Apache 推出了新版本的库并不意味着任何人的二进制文件都会发生变化。依赖于该库的每个代码库都可以决定是否以及何时移动到新版本,而与另一个代码库可能使用的版本或库的最新版本无关。
推荐阅读
- flask - Heroku 中的 Flask 网络服务器在提供 CSS 文件时返回 404
- reactjs - 每次渲染相同的组件时如何动态添加计数器?
- r - 在R中使用通配符匹配的download.file
- deep-learning - reshape`(1, 1, 28, 28)` 是什么意思
- google-bigquery - Datastudio BigQuery 连接器:查询返回错误
- python - 尝试使用硒单击带有多个文本的按钮
- python - PyMongo / MongoDB | 如何删除特定id下的一条数据
- javascript - 在图例圆环图的 onHover 期间更快地加载 Tooltip
- python - 3D CNN 模型只输出正值
- c++ - 类成员的 std::same_as 概念:哪个编译器是正确的?