文档首页/
微服务引擎 CSE/
最佳实践/
ServiceComb引擎/
ServiceComb引擎托管应用/
通过Spring Cloud Huawei SDK托管Spring Cloud应用/
快速接入ServiceComb引擎
更新时间:2024-09-26 GMT+08:00
快速接入ServiceComb引擎
使用Spring Cloud Huawei接入ServiceComb引擎主要步骤可以归纳为如下两个步骤:
- 增加/修改组件依赖。
- 在配置文件“boostrap.yaml”中增加ServiceComb引擎配置信息。
具体操作,请参考Spring Cloud接入ServiceComb引擎。本章节补充在实际改造过程中需要注意的一些事项,特别是组件依赖有关的注意事项。
假设原来的业务系统都是基于Maven的项目。
第一步:熟悉原业务系统pom结构
Spring Cloud应用系统的pom结构一般分三种:
- 第一种使用Spring Boot或者Spring Cloud提供的公共pom作为parent,例如:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.5.RELEASE</version> </parent>
或者:
<parent> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-build</artifactId> <version>2.2.3.RELEASE</version> </parent>
- 第二种使用项目本身的parent,不使用Spring Boot或者Spring Cloud提供的公共pom作为parent。但是在项目中,通过dependency management引入了依赖管理,例如:
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
- 还有些应用系统会混合使用第一种和第二种,既使用了Spring Boot或者Spring Cloud提供的公共pom作为parent,又通过dependency management引入了依赖管理。
第二步:修改parent和dependency management避免三方软件冲突
parent和dependency management的修改是避免三方软件冲突的关键步骤。
- 首先确定选用的Spring Cloud Huawei的版本,然后查询Spring Cloud Huawei版本对应的Spring Boot版本和Spring Cloud版本。Spring Cloud Huawei一般建议使用当前最新版本,配套的Spring Boot版本和Spring Cloud版本可以在Spring Cloud Huawei官网查询。
- 比对当前项目parent的版本与Spring Cloud Huawei配套的Spring Boot版本和Spring Cloud版本,如果当前项目的parent版本比较低,修改为Spring Cloud Huawei的版本;如果当前版本的parent版本比较高,则无需修改。
- 在当前项目的dependency management中独立引入Spring Boot、Spring Cloud、Spring Cloud Huawei的依赖管理。如果原来项目的Spring Boot或者Spring Cloud版本比较高,使用原来项目的版本;如果原来项目的版本比较低,则使用Spring Cloud Huawei的版本。需要注意依赖管理的顺序,排在前面的依赖管理会优先使用。Spring Boot、Spring Cloud的版本是基础,被这两个依赖关系管理的软件,建议都不提供额外的依赖管理,跟随社区的版本,可以有效减少冲突。这里之所以把3个依赖关系独立出来引入,是为了给以后独立升级其中一个组件提供便利。
<dependencyManagement> <dependencies> <!-- configure user spring cloud / spring boot versions --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- configure spring cloud huawei version --> <dependency> <groupId>com.huaweicloud</groupId> <artifactId>spring-cloud-huawei-bom</artifactId> <version>${spring-cloud-huawei.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
如果业务系统集成了Spring Cloud Alibaba等依赖关系,在dependency management删除;一些已经被Spring Boot、Spring Cloud管理的不必要的依赖,也建议删除。常见的需要删除的依赖管理有:<dependencyManagement> <dependencies> <!-- 第三方扩展的依赖 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.1.0.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <!-- 已经被Spring Cloud管理的依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> <version>1.4.7.RELEASE</version> </dependency> </dependencies> </dependencyManagement>
第三步:添加/删除依赖
添加的是服务注册发现、集中配置管理、服务治理相关的组件,删除的也是这些组件的第三方实现。这些功能以外的其他组件不需要变化,但需要关注Spring Boot、Spring Cloud版本升级后,这些软件可能需要配套升级。兼容性的问题通常会在编译阶段或者服务启动阶段发现。
添加依赖一般不指定版本号,把版本号交给parent和dependency management管理。
在微服务应用中引入:
<dependency> <groupId>com.huaweicloud</groupId> <artifactId>spring-cloud-starter-huawei-service-engine</artifactId> </dependency>
在Spring Cloud Gateway应用中引入:
<dependency> <groupId>com.huaweicloud</groupId> <artifactId>spring-cloud-starter-huawei-service-engine-gateway</artifactId> </dependency>
如果存在下面这些依赖,需要删除:
<!-- nacos场景 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>spring-cloud-gateway-starter-ahas-sentinel</artifactId> </dependency> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>spring-boot-starter-ahas-sentinel-client</artifactId> </dependency> <!-- eureka场景 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
通常下面的一些依赖,不需要删除:
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.28</version> </dependency>