gpt4 book ai didi

java - 微服务Maven项目结构

转载 作者:行者123 更新时间:2023-12-02 03:28:55 27 4
gpt4 key购买 nike

我正在开发一个项目,我们将在其中部署完整的 Spring Boot 微服务架构,以及负载平衡、服务注册表、边缘服务器和集中监控等支持服务。

我有一个项目将在所有核心微服务之间共享,其中包含 DAO 以及核心微服务的所有依赖项。我希望能够发布一个约 60Mb 的 jar,并让其他 Spring Boot 核心微服务非常轻量级(<1Mb)。在运行时,核心微服务将引用其类路径上的共享 jar。

我设置项目的方式是拥有单独的项目,其结构如下:

|shared_project
|pom.xml

|ms-1
|pom.xml

|ms-2
|pom.xml

共享项目使用 maven-assemble-plugin 创建一个大 jar 并将其复制到我本地的 .m2 存储库。 ms-1 和 ms-2 pom 使用 maven-jar-plugin 创建其 jar,并具有一个依赖项,即共享项目。

我确信这不是处理这个问题的最佳方法。它在单元测试期间产生了问题,我必须想象它会在以后产生问题。我已经看到使用 pom 文件中的父级、将项目嵌套在另一个目录中以及其他方式来完成此操作。

我想知道的是,通过使用 Maven 保持 Spring Boot 项目的依赖项和共享代码集中化和外部化的最佳实践是什么,以便您经常滚动的项目保持轻量级和解耦?

奖励问题:

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

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

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

最佳答案

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

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

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

想知道其他意见

快乐编码;)

关于java - 微服务Maven项目结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38380827/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com