当前位置: 首页 > 科技观察

来个简单的,微服务项目中如何管理依赖版本号?

时间:2023-03-18 02:53:25 科技观察

1。微服务架构理论上的微服务架构和实际的微服务往往存在一些差异。理论上,在微服务架构中,每一个独立的微服务都可以是多种语言的,像我们使用的Eureka注册中心,就支持多种语言,这样可以充分发挥各种语言的优势。如果是这样的话,就没有必要对整个项目的版本进行管理,也无法管理。但在实际操作中,考虑到团队的技术栈、现有技术生态等因素,大多数情况下,我们可能不会在项目中混入其他语言,比如用Java开发,相信大部分小伙伴都是这样做的。既然统一开发是用Java语言做的,那么一个需求就浮出水面,就是项目依赖的统一管理。这个问题不是绝对的。大型微服务项目由不同的团队开发。每个团队维护自己的项目,然后通过RPC或HTTP进行交互。在这种情况下,版本号也可以由每个团队维护。这样在升级版本的时候,就不需要一起升级了。每个团队都可以单独完成并逐一升级。但是,这种方式可能会带来另一个问题,即依赖版本的碎片化。N次迭代后,两个项目所依赖的微服务版本可能会有非常大的差异。因此,在实践中,一些团队倾向于统一管理项目版本。统一管理也很简单,创建一个parent就可以了,但是有些朋友容易把这种parent和聚合项目搞混了,下面宋哥给大家讲讲如何统一管理项目版本号。2.统一管理版本号2.1聚合项目首先说一下聚合项目。我不会在这里重写代码。我以未人氏(https://github.com/lenve/vhr)为例分享给大家。微信项目的服务端是一个聚合项目。我们可以查看vhrserver的pom.xml文件:vhrorg.javaboy1.0-SNAPSHOT4.0.0vhrserverpomvhr-mappervhr-modelvhr-servicevhr-web在这个聚合项目中,vhr-model用来放实体类,vhr-mapper用来放Dao层,vhr-server是用来放Service层,vhr-web是一个SpringBoot项目。在聚合项目中,vhr-web作为聚合项目的一部分,不能单独打包,因为它依赖vhr-service,vhr-service依赖vhr-mapper,vhr-mapper依赖vhr-model。我们需要从vhrserver打包,这样它会自动解决模块之间的依赖关系。单独打包vhr-web会报如下错误:Unifiedpackagingfromvhrserver,结果如下:可以看到,我们需要直接打包聚合项目,内部依赖问题会自动解决。有人会问,既然前面报了Couldnotfindartifactorg.javaboy:vhr-service:pom:1.0-SNAPSHOT错误,能不能先把vhr-service安装到本地仓库,再打包vhr-web?这个可以吗?不行,因为这是一个聚合项目,你不能这样做,只能从聚合项目中打包。2.2版本号的统一管理虽然上面提到的聚合项目也可以实现版本号的统一管理,但是我们不能在微服务中使用这种方式。你想要一个包含很多子系统的微服务系统,比如产品管理、交易管理、物流管理等,如果你要封装产品管理,你就得从聚合工程处封装。生成各自的包,效率太低。但是我们还是想实现版本号的统一管理,怎么办呢?只需创建一个父子项目。这种项目结构与聚合项目非常相似,但又有所不同。很多朋友会一头雾水,这里给大家做个小示范。首先我们定义一个普通的Maven项目作为父项目。我把pom.xml文件拿出来给大家参考:org.springframework.bootspring-boot-starter-parent2.3.0.RELEASEpomorg.javaboy.vmallvmall1.0-SNAPSHOTEveryone可以看到,父项目本身也有一个parent,即SpringBoot中的parent。这里的打包还是pom,然后我们定义依赖管理,管理一些没有包含在spring-boot-starter-parent中的依赖版本。但是请注意,这里没有模块节点,这是一个很大的区别。接下来,我们创建其他微服务项目。在创建过程中,我们可以采用平铺的方式,比如:也可以做成层级结构的父子形式,如下:两种方式都可以。那么在每个微服务项目中,只要重新修改parent即可:之后我们就可以统一管理每个微服务中的依赖版本了。这种项目结构不同于聚合项目。这种项目打包是可以独立打包的。首先我们先安装父项目到本地仓库:然后去安装vmall-common模块,最后打包vmall-app-manager。注意目前的vmall-app-manager可以独立打包,不需要从totalparent统一打包。如果需要在微服务项目中统一管理项目版本,可以采用这种方式。朋友们可以细细品味这种方法与聚合工程的区别。3.总结好了,今天的内容比较简单。结合之前发过的两篇文章,相信大家对于如何组织微服务项目的代码都有一定的想法了。本文经授权转载自公众号《牧童》。公众号Mamaboy分享了很多Java微服务干货,欢迎关注!