SpringCloud应用如何接入ServiceComb引擎

微服务引擎

微服务引擎(Cloud Service Engine,CSE),是用于微服务应用的云中间件,支持华为云自研的注册配置中心Servicecomb引擎和开源增强的注册配置中心Nacos引擎。用户可结合其他云服务,快速构建云原生微服务体系,实现微服务应用的快速开发和高可用运维。

前提条件

  • 已创建ServiceComb引擎。
  • 已创建CCE集群。
  • 已在ServiceStage创建环境,并对ServiceComb引擎和CCE资源进行了纳管。
  • 本地编译构建打包机器环境已安装了Java JDK、Maven,并且能够访问Maven中央库。
  • 已基于Spring Cloud开发好了微服务应用。

操作步骤

步骤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。

步骤3:(可选)配置安全认证参数。

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

ServiceComb引擎开启了安全认证之后,所有调用的API都需要先获取token才能调用。

使用安全认证首先需要从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: 自定义算法名称

CSE使用过程中常见问题

常见问题