使用Spring和Kotlin在微服务体系结构中共享数据类
假设有两个微服务相互通信,它们都作为契约共享数据类。虽然你不想复制每个微服务项目中的所有合同,但共享它们的最佳方式是什么 正如我们所见,只有两种选择:使用Spring和Kotlin在微服务体系结构中共享数据类,spring,kotlin,microservices,Spring,Kotlin,Microservices,假设有两个微服务相互通信,它们都作为契约共享数据类。虽然你不想复制每个微服务项目中的所有合同,但共享它们的最佳方式是什么 正如我们所见,只有两种选择: 复制共享合同,同时复制代码 编译第一方库并导入它 我的团队不久前也遇到了同样的情况,我们决定采用第二点的变体。我们使用Maven多模块项目,因此一个微服务生成了库,然后由第二个微服务导入 Maven多模块项目在此解释: 执行project1>project2依赖项不是一个好主意,因为它在将来可能会发生变化,最终您将不得不重构整个过程 我要做的是
- 复制共享合同,同时复制代码
- 编译第一方库并导入它
我们使用Maven多模块项目,因此一个微服务生成了库,然后由第二个微服务导入 Maven多模块项目在此解释:
执行
project1>project2
依赖项不是一个好主意,因为它在将来可能会发生变化,最终您将不得不重构整个过程
我要做的是创建一个发布到内部Nexus或artifactory的共享库,然后您可以将其作为依赖项添加到您的项目中,这样您就可以得到如下内容:
library > project1
library > project2
另一个想法是使用类似于只共享数据传输对象的东西。这具有版本控制和向前兼容性的额外优势。您检查过Spring Cloud合同了吗?它提供了一些工具来保持微服务之间的契约,而不需要POJO库。我在这里使用“契约”作为数据类的术语,这可能需要更多的定义。因此,在我看来,Spring云契约并不能解决这个问题,因为它在测试环境中为端点提供模拟。通常,您会保留一些单独的commons项目,在其中您可以对DTO进行版本设置,并将其作为依赖项添加到每个微服务项目中。复制代码总是不好的,我强烈建议您不要这样做。是的,这就是我们当时所做的,唯一的区别是Gradle Builder,但这里也有: