【问题标题】:Microservices Maven Project Structure微服务 Maven 项目结构
【发布时间】: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 项目的依赖项和共享代码集中和外部化的最佳实践是什么,以便您经常滚动的项目保持轻量级和解耦?

额外问题:

  1. 我们将使用 Jenkins/TeamCity 进行 CI 和自动化测试这一事实是否会影响答案?

  2. 在启动期间每个项目在其类路径中引用的文件系统上有一个共享 jar 是否会带来任何挑战?根据需求,我们可以灵活地启动 10 个 microservice-1 实例,仅启动 3 个 microservice-2 实例。

编辑:我认为这里已经有了一个很好的答案: Parent pom and microservices

【问题讨论】:

  • 我认为您在这种安排方面面临挑战的部分原因是,在微服务之间共享任何东西并不是很常见的做法。无论好坏,服务中都有重复的代码是很常见的。话虽如此,请查看您的服务并以最小化重叠的方式进行拆分。不要为了变小而变小。
  • 是的,也许我在编写之前就过度优化了部署,我猜。我只是不想为其他人树立一个不好的先例。不过,我绝对不会在 5 个不同的地方编写相同的代码。那将是疯狂的。我只是将其作为依赖项包含在内,让它自然流线化。
  • 这能回答你的问题吗? Parent pom and microservices

标签: java spring maven microservices


【解决方案1】:

这是我们在企业应用程序中所做的:

创建一个新的 maven 项目,它将作为所有项目的 uber jar。 在此项目中添加您需要的所有应用程序作为依赖项。 在此添加 maven shade 插件。 在这个 uber jar 中使用 public static void main(String[] args) 创建一个 runner class,它会初始化所有 bean 并启动所有应用程序。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    很抱歉 2 年后回复,但这是我在搜索引擎上的第一次点击。您提到共享 DAO 等,但据我了解微服务,根本不共享 DAO 不是主要目标之一。这种结构实际上不会破坏您的微服务架构吗? 2年后对此有何反馈? ;)

    但我同意,有一个非常小的代码库可以共享。但这只是一些基本的实用程序、异常库等,因此可以在公司的任何项目之间共享非常基本的东西。

    我永远不会创建共享核心代码库或/和依赖于外部 jar 的部署。根据我的理解,基于 java 的微服务部署必须像“java -jar application.jar”一样简单......使本地测试、CI、部署和替换应用程序变得如此简单

    想知道其他意见

    快乐编码 ;)

    【讨论】:

      猜你喜欢
      • 2018-01-28
      • 1970-01-01
      • 2017-12-26
      • 2019-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      相关资源
      最近更新 更多