Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Spring和Kotlin在微服务体系结构中共享数据类_Spring_Kotlin_Microservices - Fatal编程技术网

使用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,但这里也有: