文档首页/ 微服务引擎 CSE/ 开发指南/ 对接微服务应用/ Spring Cloud接入ServiceComb引擎
更新时间:2024-08-02 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:
          service:
            name: ${spring.application.name}
            application: basic-application
            environment: production
          discovery:
            enabled: true
            healthCheckInterval: 15
            pollInterval: 15000
            waitTimeForShutDownInMillis: 15000
            address: http://127.0.0.1:30100
            appName: basic-application  
            version: 0.0.1
          config:
            enabled: true
            kie:
              customLabel: default
              customLabelValue: default
            serverAddr: http://127.0.0.1:{port}
            serverType: {servertype}
            fileSource: governance.yaml
          dashboard:
            enabled: false
            address: http://127.0.0.1:30109
    

    其中,各个配置项说明见表1

    表1 Spring Cloud配置项

    配置项

    含义

    缺省值

    是否必须配置

    备注

    spring.application.name

    应用名称。

    -

    -

    spring.cloud.servicecomb.service.name

    微服务名称。

    -

    不填则为配置的spring.application.name值,Spring Cloud Huawei框架版本1.10.2-2021.0.x及之前是通过spring.cloud.servicecomb.discovery.serviceName配置。

    spring.cloud.servicecomb.service.application

    为当前微服务所属应用名称。

    default

    应用名称相同的微服务之间才可以相互发现,建议每个业务定义一个名称,这样可以做到服务发现隔离,Spring Cloud Huawei框架版本1.10.2-2021.0.x及之前通过spring.cloud.servicecomb.discovery.appName配置。

    spring.cloud.servicecomb.service.environment

    微服务注册环境。

    <空>

    环境名称相同的微服务之间才可以相互发现,Spring Cloud Huawei框架版本1.10.2-2021.0.x及之前通过server.env配置。

    取值为环境ID。支持取值为development、testing、acceptance、production。

    spring.cloud.servicecomb.discovery.enabled

    是否开启服务发现能力。

    true

    -

    spring.cloud.servicecomb.discovery.healthCheckInterval

    心跳检测时间,单位为秒。

    15

    -

    spring.cloud.servicecomb.discovery.pollInterval

    拉取实例的轮询时间,单位为毫秒。

    15000

    -

    spring.cloud.servicecomb.discovery.waitTimeForShutDownInMillis

    无损下线等待时长,服务停止时先从注册中心注销自己,等waitTimeForShutDownInMillis时间后容器退出,单位为毫秒。

    15000

    -

    spring.cloud.servicecomb.discovery.address

    注册发现地址。

    -

    -

    spring.cloud.servicecomb.discovery.appName

    服务名称。

    -

    -

    spring.cloud.servicecomb.discovery.version

    服务版本号。

    1.0.0.0

    服务升级时需要,防止契约注册失败。

    spring.cloud.servicecomb.config.enabled

    是否启用动态配置。

    true

    -

    spring.cloud.servicecomb.config.kie.customLabel

    自定义配置标签键值。

    -

    当配置中心类型为kie时,如果使用自定义标签方式下发配置,需要配置customLabel、customLabelValue,微服务名、环境名、应用名标签仅支持单独适配。

    spring.cloud.servicecomb.config.kie.customLabelValue

    为自定义配置标签值。

    -

    -

    spring.cloud.servicecomb.config.serverAddr

    配置中心地址。

    -

    • 当ServiceComb引擎版本为1.x时,{port}取值为30103。
    • 当ServiceComb引擎版本为2.x时,{port}取值为30110。

    spring.cloud.servicecomb.config.serverType

    配置中心类型。

    config-center

    • 当ServiceComb引擎版本为1.x时,取值为config-center。
    • 当ServiceComb引擎版本为2.x时,取值为kie或config-center,推荐使用kie作为配置中心。

    spring.cloud.servicecomb.config.fileSource

    内容为yaml的配置项列表,使用“,”分割。

    -

    当配置中心类型为config-center时,如果配置中心以配置文件形式下发配置,必须填写fileSource值予以解析配置,否则无法获取正确的配置内容。

    spring.cloud.servicecomb.config.dashboard.enabled

    是否开启仪表盘功能。

    false

    -

    spring.cloud.servicecomb.config.dashboard.address

    仪表盘服务端地址,端口为30109。

    -

    -

  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及以上版本。

相关文档