文档首页> 微服务引擎 CSE> 开发指南> 对接微服务应用> Spring Cloud接入ServiceComb引擎
更新时间:2023-11-07 GMT+08:00

Spring Cloud接入ServiceComb引擎

本章节介绍Spring Cloud如何接入ServiceComb引擎,使得Spring Cloud能够对接ServiceComb引擎,并且方便的使用ServiceComb引擎提供的最常用的功能。在使用ServiceComb引擎功能章节,会给出具体的开发指导。

本章节介绍的开发方法,可以在Spring Cloud Huawei Samples项目中找到对应的代码,供您在开发过程中参考。

Spring Cloud接入ServiceComb引擎需要使用Spring Cloud Huawei,本文主要描述如何在Spring Cloud中集成和使用Spring Cloud Huawei。

前提条件

  • 版本要求:版本要求请参见ServiceComb引擎微服务开发框架版本要求
  • 本文假设您的项目使用了maven管理打包,您熟悉maven的依赖管理机制,能够正确的修改pom.xml文件中的dependency management和dependency。

操作步骤

  1. 在项目的“pom.xml”文件中引入依赖。

    • 如果使用Spring Cloud开发微服务,引入:
      <dependency>
        <groupId>com.huaweicloud</groupId>
        <artifactId>spring-cloud-starter-huawei-service-engine</artifactId>
      </dependency>
      

      上述spring-cloud-starter-huawei-service-engine模块包含以下依赖模块:

      <!--  注册发现模块  -->
      <dependency>
        <groupId>com.huaweicloud</groupId>
        <artifactId>spring-cloud-starter-huawei-discovery</artifactId>
      </dependency>
      <!--  配置中心模块  -->
      <dependency>
        <groupId>com.huaweicloud</groupId>
        <artifactId>spring-cloud-starter-huawei-config</artifactId>
      </dependency>
      <!--  服务治理模块  -->
      <dependency>
        <groupId>com.huaweicloud</groupId>
        <artifactId>spring-cloud-starter-huawei-governance</artifactId>
      </dependency>
      <!--  灰度发布模块  -->
      <dependency>
        <groupId>com.huaweicloud</groupId>
        <artifactId>spring-cloud-starter-huawei-router</artifactId>
      </dependency>
      
    • 如果使用Spring Cloud Gateway开发网关,引入:
      <dependency>
        <groupId>com.huaweicloud</groupId>
        <artifactId>spring-cloud-starter-huawei-service-engine-gateway</artifactId>
      </dependency>

      上述spring-cloud-starter-huawei-service-engine-gateway模块包含以下依赖模块:

      <!--  注册发现模块  -->
      <dependency>
        <groupId>com.huaweicloud</groupId>
        <artifactId>spring-cloud-starter-huawei-discovery</artifactId>
      </dependency>
      <!--  配置中心模块  -->
      <dependency>
        <groupId>com.huaweicloud</groupId>
        <artifactId>spring-cloud-starter-huawei-config</artifactId>
      </dependency>
      <!--  服务治理模块  -->
      <dependency>
        <groupId>com.huaweicloud</groupId>
        <artifactId>spring-cloud-starter-huawei-governance</artifactId>
      </dependency>
      <!--  灰度发布模块  -->
      <dependency>
        <groupId>com.huaweicloud</groupId>
        <artifactId>spring-cloud-starter-huawei-router</artifactId>
      </dependency>
      <!--  网关模块  -->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
      </dependency>
      

      推荐使用Maven Dependency Management管理项目依赖的三方软件,在项目中引入:

       <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>

    如果您的项目中,已经包含了上述依赖,则不需要做任何处理。

    如果您的项目中使用了其他注册发现库,比如eureka,需要对项目进行适当调整,包括:

    • 删除项目中eureka相关依赖,比如:
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
      </dependency>
    • 如果代码中使用了@EnableEurekaServer, 需要删除并替换为@EnableDiscoveryClient。

      组件spring-cloud-starter-huawei-service-engine包含了服务注册、配置中心、服务治理、灰度发布、契约管理等功能。其中契约管理对于Spring Cloud微服务应用的运行不是必须的。ServiceComb引擎对契约个数存在数量限制,当微服务应用契约个数超过限制,会注册失败。如果遗留系统无法进行合理的拆分减少契约个数,可以排除依赖,不使用契约管理功能。

      <dependency>
        <groupId>com.huaweicloud</groupId>
        <artifactId>spring-cloud-starter-huawei-service-engine</artifactId>
        <exclusions>
      	<exclusion>
      	  <groupId>com.huaweicloud</groupId>
      	  <artifactId>spring-cloud-starter-huawei-swagger</artifactId>
      	</exclusion>
        </exclusions>
      </dependency>

  2. 配置微服务信息。

    “bootstrap.yml”增加微服务描述信息。如果项目中没有“bootstrap.yml”,则创建一个新的文件。

    spring:
      application:
        name: basic-provider
      cloud:
        servicecomb:
          discovery:
            enabled: true
            address: http://127.0.0.1:30100
            appName: basic-application
            serviceName: ${spring.application.name}
            version: 0.0.1
            healthCheckInterval: 15
          config:
            serverAddr: http://127.0.0.1:{port}
            serverType: {servertype}
    • healthCheckInterval参数配置值的单位为秒。
    • 当ServiceComb引擎版本为1.x时,{port}取值为30103,{servertype}取值为config-center。
    • 当ServiceComb引擎版本为2.x时,{port}取值为30110,{servertype}取值为kie或config-center,推荐使用kie作为配置中心。

  3. (可选)配置安全认证参数。

    使用ServiceComb引擎专享版,并且启用了安全认证,需要配置,其他场景可以跳过这个步骤。

    ServiceComb引擎开启了安全认证之后,所有调用的API都需要先获取token才能调用,认证流程请参考服务中心RBAC说明

    使用安全认证首先需要从ServiceComb引擎获取用户名和密码,然后在配置文件中增加如下配置。

    • 明文方法
      spring:
        cloud:
          servicecomb:
            credentials:
              account:
                name:用户名
                password:密码
                cipher: default
    • 自定义实现加密存储算法
      首先实现接口com.huaweicloud.common.util.Cipher,里面有两个方法:
      String name(),这个是spring.cloud.servicecomb.credentials.cipher的名称定义,需要配置在配置文件中。
      char[] decode(char[] encrypted),解密接口,对secretKey进行解密后使用。
      public class CustomCipher implements Cipher
      加密解密的实现需要作为BootstrapConfiguration,首先声明:
      @Configuration
      public class MyCipherConfiguration {
        @Bean
        public Cipher customCipher() {
          return new CustomCipher();
        }
      }
      然后增加文件 META-INF/spring.factories定义配置:
      org.springframework.cloud.bootstrap.BootstrapConfiguration=\
      com.huaweicloud.common.transport.MyCipherConfiguration
      自定义完成,即可在bootstrap.yaml文件中使用新增加的解密算法:
      spring:
        cloud:
          servicecomb:
            credentials:
              account:
                name:用户名
                password:密码
                cipher: 自定义算法名称

    使用RBAC功能,需要1.6.0-Hoxton及以上版本。