Java Chassis应用如何接入ServiceComb引擎

微服务引擎

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

前提条件

  • 已创建ServiceComb引擎。
  • 已创建CCE集群。
  • 已在ServiceStage创建环境,并对ServiceComb引擎和CCE资源进行了纳管。
  • 本地编译构建打包机器环境已安装了Java JDK、Maven,并且能够访问Maven中央库。
  • 已基于Java Chassis开发好了微服务应用。
  • Java Chassis支持和不同的技术进行组合使用,配置文件的名称和实际使用的技术有关。如果您采用Spring方式使用Java Chassis,配置文件的名称一般为“microservice.yaml”,如果您采用Spring Boot方式使用Java Chassis, 配置文件名称一般为“application.yaml”。本文统一使用“microservice.yaml”表示配置文件,请结合实际项目进行区分

操作步骤

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

<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>solution-basic</artifactId>
</dependency>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>servicestage-environment</artifactId>
</dependency>

说明:上述模块solution-basic包含常用的Java Chassis功能,例如配置中心模块和服务治理模块,方便一键式启用Java Chassis常见功能。

<!-- 配置中心模块 -->
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>config-cc</artifactId>
</dependency>
<!-- 服务治理模块 -->
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>handler-governance</artifactId>
</dependency>

上述模块servicestage-environment包含以下依赖模块:

<!-- 注册发现模块 -->
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>registry-service-center</artifactId>
</dependency>

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

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>java-chassis-dependencies</artifactId>
<version>${java-chassis.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

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

其中servicestage-environment软件包是可选的。这个软件包提供了环境变量映射的功能,依赖这个软件包以后,当您采用ServiceStage部署应用,不用手工修改注册中心地址、配置中心地址、项目名称等信息,会通过环境变量覆盖“microservice.yaml”中的默认配置,它包含“mapping.yaml”文件,在您自己的项目中增加“mapping.yaml”文件能够起到同样的效果。

说明:“mapping.yaml”在后续新版本可能会发生变化,以适配CSE最新的功能要求。如果期望后续升级新版本保持稳定而不是跟随CSE演进,您可以选择不依赖servicestage-environment,而是在您自己的项目中增加“mapping.yaml”。

“microservice.yaml”和“mapping.yaml”文件,一般都存放于您当前项目根目录下的“/src/main/resources/”路径下。

PAAS_CSE_ENDPOINT:
- servicecomb.service.registry.address
- servicecomb.config.client.serverUri
PAAS_CSE_SC_ENDPOINT:
- servicecomb.service.registry.address
PAAS_CSE_CC_ENDPOINT:
- servicecomb.config.client.serverUri
PAAS_PROJECT_NAME:
- servicecomb.credentials.project

# CAS_APPLICATION_NAME:
# - servicecomb.service.application
# CAS_COMPONENT_NAME:
# - servicecomb.service.name
# CAS_INSTANCE_VERSION:
# - servicecomb.service.version

solution-basic里面引入了常用的软件包,并且提供了默认的“microservice.yaml”文件。这个配置文件配置了常用的Handler和参数。其内容如下:

# order of this configure file
servicecomb-config-order: -100

servicecomb:

# handlers
handler:
chain:
Provider:
default: qps-flowcontrol-provider
Consumer:
default: qps-flowcontrol-consumer,loadbalance,fault-injection-consumer

# loadbalance strategies
references:
version-rule: 0+
loadbalance:
retryEnabled: true
retryOnNext: 1
retryOnSame: 0

# metrics and access log
accesslog:
enabled: true
metrics:
window_time: 60000
invocation:
latencyDistribution: 0,1,10,100,1000
Consumer.invocation.slow:
enabled: true
msTime: 1000
Provider.invocation.slow:
enabled: true
msTime: 1000
publisher.defaultLog:
enabled: true
endpoints.client.detail.enabled: true


“microservice.yaml”配置文件设置了servicecomb-config-order: -100 , 表示配置文件的优先级很低(order越大,优先级越高,缺省为0),如果业务服务增加了同样的配置项,会覆盖这里的配置。

说明:“microservice.yaml”文件在后续新版本可能会发生变化,以适配CSE的ServiceComb引擎最新的功能要求。如果期望后续升级新版本保持稳定而不是跟随CSE的ServiceComb引擎演进,您可以考虑将配置项写到您自己的“microservice.yaml”文件中。

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

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

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

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

servicecomb:
credentials:
rbac.enabled: true
account:
name: your account name # 从ServiceComb引擎获取的用户名
password: your password # 从ServiceComb引擎获取的密码
cipher: default #接口org.apache.servicecomb.foundation.auth.Cipher的实现类里面的name()方法返回的名称

其中“cipher”指定了对“password”进行加密的算法名称,默认提供明文存储。通过自定义实现加密,如下所示:

自定义实现,首先实现接口“org.apache.servicecomb.foundation.auth.Cipher”,里面的两个方法:

String name():这个是servicecomb.credentials.cipher的名称定义,需要配置在配置文件中。

char[] decode(char[] encrypted):解密接口,对secretKey进行解密后使用。

实现类需要声明为SPI,比如:package com.example
public class MyCipher implements Cipher

创建SPI配置文件,文件名称和路径为META-INF/service/org.apache.servicecomb.foundation.auth.Cipher, 文件内容为:

com.example.MyCipher

然后在“microservice.yaml”文件中增加配置。

servicecomb:
credentials:
rbac.enabled: true
account:
name: your account name
password: your password # 加密后的密码
cipher: youciphername #实现类里面的name()方法返回的名称

说明:明文存储无法保证安全, 建议您对密码进行加密存储。

CSE使用过程中常见问题

常见问题