更新时间:2024-09-26 GMT+08:00

快速接入ServiceComb引擎

使用Spring Cloud Huawei接入ServiceComb引擎主要步骤可以归纳为如下两个步骤:

  1. 增加/修改组件依赖。
  2. 在配置文件“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的修改是避免三方软件冲突的关键步骤。

  1. 首先确定选用的Spring Cloud Huawei的版本,然后查询Spring Cloud Huawei版本对应的Spring Boot版本和Spring Cloud版本。Spring Cloud Huawei一般建议使用当前最新版本,配套的Spring Boot版本和Spring Cloud版本可以在Spring Cloud Huawei官网查询。
  2. 比对当前项目parent的版本与Spring Cloud Huawei配套的Spring Boot版本和Spring Cloud版本,如果当前项目的parent版本比较低,修改为Spring Cloud Huawei的版本;如果当前版本的parent版本比较高,则无需修改。
  3. 在当前项目的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>