当前位置:首页 > 科技  > 软件

多人多团队应该如何实施微服务?版本如何管理?

来源: 责编: 时间:2024-01-02 09:28:02 351观看
导读大家好,我是飘渺。今天继续更新DDD&微服务专栏,本篇主要与大家分享一下在多人团队中如何更好地组织代码和版本控制。代码仓库分离首先,看看在多模块多团队的情境下,应该如何合理组织代码。以Dailymart项目为例,目前的代码

大家好,我是飘渺。今天继续更新DDD&微服务专栏,本篇主要与大家分享一下在多人团队中如何更好地组织代码和版本控制。zyy28资讯网——每日最新资讯28at.com

代码仓库分离

首先,看看在多模块多团队的情境下,应该如何合理组织代码。zyy28资讯网——每日最新资讯28at.com

以Dailymart项目为例,目前的代码组织方式是将所有的业务模块和基础组件都存放在一个代码仓库中,这种做法在小团队中较为常见,而且许多开源微服务脚手架也采用了这种组织结构。zyy28资讯网——每日最新资讯28at.com

然而,遗憾的是,这种代码组织方式只适合小团队的使用。在涉及多个团队的大型项目中,每个团队负责独立的开发模块时,这样的代码组织结构很可能会引发问题。zyy28资讯网——每日最新资讯28at.com

在多模块多团队的开发中,每个模块的发布日期和上线范围可能各不相同。为了解决这个问题,通常需要在开发过程中创建多个分支,这导致多个分支版本并存的情况。zyy28资讯网——每日最新资讯28at.com

这样的情况下,每次上线都需要协调各团队进行分支代码合并。例如,从各自的特性Feature分支合并到一个统一的测试分支,然后从测试分支构建部署镜像进行发布。然而,合并过程中一旦出现代码冲突,就需要找相关人员进行代码合并,这不仅耗时耗力,而且容易出错。(我曾参与过一个多团队项目开发,每次上线都是鸡飞狗跳)zyy28资讯网——每日最新资讯28at.com

因此,在多团队开发时,我们建议按照业务模块进行代码拆分,将每个业务模块的代码存放在独立的代码仓库中。zyy28资讯网——每日最新资讯28at.com

这样,尽管各自团队可能仍然存在多分支开发的情况,但不再需要进行统一的合并,从而极大地提高了开发部署的效率。zyy28资讯网——每日最新资讯28at.com

同时,需要将所有公共组件也放置于一个单独的代码仓库中,业务模块按需引入即可。zyy28资讯网——每日最新资讯28at.com

接下来以Dailymart为例,介绍一下代码如何拆分:zyy28资讯网——每日最新资讯28at.com

1、DailyMart项目中包含了用户、订单、购物车、库存、商品等多个模块,这些模块按照普通SpringBoot项目的形式组织代码,并存放在不同的代码仓库中。zyy28资讯网——每日最新资讯28at.com

2、将基础组件模块dailymart-starter和dailymart-dependencies模块共同放置到另外一个单独的仓库中,业务模块根据需要引入各自需要的组件。zyy28资讯网——每日最新资讯28at.com

组件版本的统一管理

在大型项目中,需要统一规划依赖组件的版本,在Maven项目中通常通过BOM(Bill Of Materials)来实现。zyy28资讯网——每日最新资讯28at.com

BOM全称是Bill Of Materials,译作材料清单。BOM本身并不是一种特殊的文件格式,而是一个普通的POM文件,只是在这个POM中,我们罗列的是一个工程的所有依赖和其对应的版本。该文件一般被其它工程使用,当其它工程引用BOM中罗列的jar包时,不用显示指定具体的版本,会自动使用BOM对应的jar版本。zyy28资讯网——每日最新资讯28at.com

在Dailymart项目中,dailymart-dependencies就是一个BOM,在该文件中定义了项目所需组件的版本。其他模块只需在pom文件的dependencyManagement中引入bom依赖,后面引入定义好的组件时就不再需要指定版本了。zyy28资讯网——每日最新资讯28at.com

<dependencyManagement>      <dependencies>            <dependency>              <groupId>com.jianzh5</groupId>              <artifactId>dailymart-dependencies</artifactId>              <version>${revision}</version>              <type>pom</type>              <scope>import</scope>          </dependency>      </dependencies> </dependencyManagement><dependencies> <dependency>        <groupId>com.google.guava</groupId>        <artifactId>guava</artifactId>      </dependency></dependencies>

公共组件升级

当项目中有多个公共组件时会出现这样一个问题,每个公共组件定义的版本可能不一样。比如dailymart-common-spring-boot-starter的版本是1.0.0,dailymart-cache-spring-boot-starter的版本是1.0.1,这样就导致项目的依赖管理变得比较混乱。zyy28资讯网——每日最新资讯28at.com

推荐的解决办法是使用 revision 占位符统一管理基础组件版本。zyy28资讯网——每日最新资讯28at.com

1、在pom文件中定义属性zyy28资讯网——每日最新资讯28at.com

<properties>      <revision>2024.0.0-SNAPSHOT</revision></properties>

2、定义组件时直接使用revision变量作为版本号zyy28资讯网——每日最新资讯28at.com

<parent>      <groupId>com.jianzh5</groupId>      <artifactId>dailymart-boot</artifactId>      <version>${revision}</version>  </parent>    <artifactId>dailymart-starter</artifactId>

3、在bom文件中通过revision占位符引入公共组件zyy28资讯网——每日最新资讯28at.com

<dependencyManagement>    <dependencies>   <!-- Internal dependencies Start-->   <dependency>    <groupId>com.jianzh5</groupId>    <artifactId>dailymart-common-spring-boot-starter</artifactId>    <version>${revision}</version>   </dependency>  <dependency>       <groupId>com.jianzh5</groupId>       <artifactId>dailymart-ddd-spring-boot-starter</artifactId>       <version>${revision}</version>   </dependency>  </dependencies>  </dependencyManagement>

这样,若公共组件需要修改版本,只需修改 revision 变量的值,各组件版本就会统一变更,非常方便。zyy28资讯网——每日最新资讯28at.com

不过使用这种方式在公共组件模块执行 maven install 或 maven deploy 时会出现问题,推送到maven仓库中的pom文件仍然使用 revision 变量,业务模块无法直接引用。zyy28资讯网——每日最新资讯28at.com

此时我们需要借助Maven插件 flatten-maven-plugin,使其在 install 或 deploy 时自动将 revision 替换成具体的版本号。zyy28资讯网——每日最新资讯28at.com

<build>      <plugins>          <plugin>              <groupId>org.codehaus.mojo</groupId>              <artifactId>flatten-maven-plugin</artifactId>              <version>${maven-flatten.version}</version>              <configuration>                  <updatePomFile>true</updatePomFile>                  <flattenMode>resolveCiFriendliesOnly</flattenMode>              </configuration>              <executions>                  <execution>                      <id>flatten</id>                      <goals>                          <goal>flatten</goal>                      </goals>                      <phase>process-resources</phase>                  </execution>                  <execution>                      <id>flatten.clean</id>                      <goals>                          <goal>clean</goal>                      </goals>                      <phase>clean</phase>                  </execution>              </executions>          </plugin>      </plugins>  </build>

在pom文件添加此插件后,执行 install 时会生成一个名为 .flattened-pom.xml 的文件,打开文件后可以看到 revision 变量已经全部替换成了具体的版本号。zyy28资讯网——每日最新资讯28at.com

图片图片zyy28资讯网——每日最新资讯28at.com

Maven版本的选择

在将自定义组件推送到maven仓库时,可以选择两种不同版本:Release版本和Snapshot版本。这两者应该如何选择呢?zyy28资讯网——每日最新资讯28at.com

两者区别的区别如下:zyy28资讯网——每日最新资讯28at.com

  • 如果是Snapshot版本,在mvn deploy时会自动发布到快照版本库中。引入使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,Maven会自动从仓库下载最新的快照版本。
  • 如果是Release版本,那么在mvn deploy时会自动发布到正式版本库中。引入正式版本的模块,在不更改版本号的情况下,编译打包时,如果本地已经存在该版本的模块则不会主动去镜像服务器上下载。

简而言之:Release版本是正式版,有bug不能再继续使用这个版本号,需要配合开发方修改版本号;Snapshot版本是快照版,有bug可以继续使用同一版本号,可以自动升级。zyy28资讯网——每日最新资讯28at.com

如果是内部开发项目,推荐使用Snapshot版本,即定义组件时在版本号后面加上 -SNAPSHOP 标识符,这样搭配上DevOps会非常方便;如果是需要对外发布的组件,还是需要使用Release版本发布。zyy28资讯网——每日最新资讯28at.com

小结

本文介绍了在多人团队协作中更有效地组织代码和进行版本控制的方法,希望对你有所帮助!zyy28资讯网——每日最新资讯28at.com

  1. 代码仓库优化: 建议按业务模块分离代码至独立仓库,提高开发效率。
  2. 组件版本统一管理: 引入BOM,通过 revision 占位符简化组件版本管理。
  3. 公共组件版本升级: 推荐使用 revision 占位符集中管理基础组件版本,借助 flatten-maven-plugin 解决版本问题。
  4. Maven版本选择: 内部项目使用Snapshot版本,外部发布使用Release版本,确保灵活性和稳定性。

本文链接:http://www.28at.com/showinfo-26-54996-0.html多人多团队应该如何实施微服务?版本如何管理?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Qs 和 Querystring:解析和格式化 URL query 字符串的工具库

下一篇: Koin轻量级依赖注入框架,轻松集成到Android应用开发中

标签:
  • 热门焦点
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • 一文看懂为苹果Vision Pro开发应用程序

    译者 | 布加迪审校 | 重楼苹果的Vision Pro是一款混合现实(MR)头戴设备。Vision Pro结合了虚拟现实(VR)和增强现实(AR)的沉浸感。其高分辨率显示屏、先进的传感器和强大的处理能力
  • 如何使用JavaScript创建一只图像放大镜?

    译者 | 布加迪审校 | 重楼如果您曾经浏览过购物网站,可能遇到过图像放大功能。它可以让您放大图像的特定区域,以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验
  • ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大&ldquo;烤&rdquo;之下的除了众生,还有各大企业发布的ESG报告。ESG是&ldquo;环境保
  • iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    经过了一段时间的密集爆料,昨日iQOO官方如期对外宣布:将于5月23日推出全新的iQOO Neo8系列新品,官方称这是一款拥有旗舰级性能调校的作品。随着发布时
  • OPPO K11采用全方位护眼屏:三大护眼能力减轻视觉疲劳

    日前OPPO官方宣布,全新的OPPO K11将于7月25日正式发布,将主打旗舰影像,和同档位竞品相比,其最大的卖点就是将配备索尼IMX890主摄,堪称是2000档位影像表
  • DRAM存储器10月价格下跌,NAND闪存本月价格与上月持平

    10月30日,据韩国媒体消息,自今年年初以来一直在上涨的 DRAM 存储器的交易价格仅在本月就下跌了近 10%,此次是全年首次降价,而NAND 闪存本月价格与上月持平。市
  • 上海举办人工智能大会活动,建设人工智能新高地

    人工智能大会在上海浦江两岸隆重拉开帷幕,人工智能新技术、新产品、新应用、新理念集中亮相。8月30日晚,作为大会的特色活动之一的上海人工智能发展盛典人工
Top