【发布时间】:2016-11-17 18:17:06
【问题描述】:
我正在开展一个项目,我们将在其中部署完整的 Spring Boot 微服务架构,以及负载平衡、服务注册表、边缘服务器和集中监控等支持服务。
我有一个项目将在所有核心微服务之间共享,其中包含 DAO 和核心微服务的所有依赖项。我希望能够发布一个 ~60Mb 的 jar,并让其他 Spring Boot 核心微服务非常轻量级(
我设置项目的方式是有一个单独的项目,结构如下:
|shared_project
|pom.xml
|ms-1
|pom.xml
|ms-2
|pom.xml
共享项目使用 maven-assembly-plugin 创建一个大 jar 并将其复制到我的本地 .m2 存储库。 ms-1 和 ms-2 pom 使用 maven-jar-plugin 来创建它们的 jars 并具有一个依赖项,即共享项目。
我确定这不是处理此问题的最佳方法。它在单元测试期间产生了问题,我不得不想象它会产生问题。我已经看到使用 pom 文件中的父项、将项目嵌套在另一个目录中以及其他方式来完成此操作。
我想知道的是,关于通过使用 Maven 保持 Spring Boot 项目的依赖项和共享代码集中和外部化的最佳实践是什么,以便您经常滚动的项目保持轻量级和解耦?
额外问题:
我们将使用 Jenkins/TeamCity 进行 CI 和自动化测试这一事实是否会影响答案?
在启动期间每个项目在其类路径中引用的文件系统上有一个共享 jar 是否会带来任何挑战?根据需求,我们可以灵活地启动 10 个 microservice-1 实例,仅启动 3 个 microservice-2 实例。
编辑:我认为这里已经有了一个很好的答案: Parent pom and microservices
【问题讨论】:
-
我认为您在这种安排方面面临挑战的部分原因是,在微服务之间共享任何东西并不是很常见的做法。无论好坏,服务中都有重复的代码是很常见的。话虽如此,请查看您的服务并以最小化重叠的方式进行拆分。不要为了变小而变小。
-
是的,也许我在编写之前就过度优化了部署,我猜。我只是不想为其他人树立一个不好的先例。不过,我绝对不会在 5 个不同的地方编写相同的代码。那将是疯狂的。我只是将其作为依赖项包含在内,让它自然流线化。
-
这能回答你的问题吗? Parent pom and microservices
标签: java spring maven microservices