1.4 对接微服务应用
1.4.2 Java Chassis 接入 CSE
然后增加文件 META-INF/spring.factories定义配置:
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.huaweicloud.common.transport.MyCipherConfiguration 自定义完成,即可在bootstrap.yaml文件中使用新增加的解密算法:
spring:
cloud:
servicecomb:
credentials:
account:
name:用户名 password:密码
cipher: 自定义算法名称 说明
使用安全认证功能,需要1.6.0-Hoxton及以上版本。
使用微服务引擎专业版,不能使用watch功能,需要在配置文件里面关闭,否则会周期性打印错 误日志。服务中心设置watch=false。1.6.0-Hoxton及以上版本默认没有开启watch功能,不需 要设置。
spring:
cloud:
servicecomb:
discovery:
watch: false ----结束
1.4.2 Java Chassis 接入 CSE
本章节介绍Java Chassis如何接入CSE,使得Java Chassis能够对接CSE,并且方便的使 用CSE提供的最常用的功能。在使用微服务引擎功能章节,会给出具体的开发指导。
本章节介绍的开发方法,可以在Apache ServiceComb Samples项目中找到对应的代 码,供您在开发过程中参考。
前提条件
● 已基于Java Chassis开发好了微服务应用。
Java Chass框架下的微服务应用开发,请参考https://servicecomb.apache.org/
references/java-chassis/zh_CN/。
● 版本要求:Java Chassis 2.3.0及以上版本。
● 本文假设您的项目使用了maven管理打包,您熟悉maven的依赖管理机制,能够 正确的修改“pom.xml”文件中的dependency management和dependency。
● 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>
推荐使用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>
如果您的项目中,已经包含了上述依赖,则不需要做任何处理。
- 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”文件中增加配置。
servicecomb:
● 自定义实现,首先实现接口
“org.apache.servicecomb.foundation.auth.Cipher”,里面有两个方法:
– String name()
这个是servicecomb.credentials.akskCustomCipher的名称定义,需要配置在 配置文件中。
– char[] decode(char[] encrypted)
解密接口,对secretKey进行解密后使用。
实现类需要声明为SPI,比如:
package com.example
public class MyCipher implements Cipher
创建SPI配置文件,文件名称和路径为META-INF/serivces/
org.apache.servicecomb.foundation.auth.Cipher, 文件内容为:
com.example.MyCipher
然后在“microservice.yaml”文件中增加配置。
servicecomb:
credentials:
accessKey: AK
secretKey: SK #对应的加密后的SK project: 项目名称
akskCustomCipher: youciphername #实现类里面的name()方法返回的名称 说明
如果不想将AK/SK写入配置文件,也可以使用如下两种方法,具体操作请参考Java Chassis。
● 使用环境变量。操作系统环境变量名称不支持“.”,Java Chassis能够自动处理 servicecomb_credentials_accessKey环境变量,将其映射到
servicecomb.credentials.accessKey。
● 增加“mapping.yaml”文件,自定义环境变量名称。在步骤1介绍模块servicestage-environment的时候,已经用到了这个方法。
步骤3 (可选)配置安全认证参数。
使用微服务引擎专享版,并且启用了安全认证,需要配置,其他场景可以跳过这个步 骤。
微服务引擎开启了安全认证之后,所有调用的API都需要先获取token,才能调用,认 证流程请参考服务中心RBAC说明。
使用安全认证首先需要从微服务引擎获取用户名和密码,然后在配置文件中增加如下 配置:
servicecomb:
credentials:
rbac.enabled: true account:
name: your account name # 从微服务引擎获取的用户名 password: your password # 从微服务引擎获取的密码
cipher: default #接口org.apache.servicecomb.foundation.auth.Cipher的实现类里面的name() 方法返回的名称
其中“cipher”指定了对“password”进行加密的算法名称,默认提供明文存储。
和AK/SK认证的加密方案类似,通过实现接口
“org.apache.servicecomb.foundation.auth.Cipher”可以对密码进行加密存储。
说明
● 明文存储无法保证安全, 建议您对密码进行加密存储。
● 和配置AK/SK一样,也可以使用环境变量配置用户名和密码信息,请参考Java Chassis。
● 使用微服务引擎专业版,不能使用watch功能,需要在配置文件里面关闭,否则会周期性打 印错误日志。服务中心设置watch=false,配置中心设置refreshMode=1。
servicecomb:
service:
application: porter-application name: user-service
version: 0.0.1 registry:
address: http://localhost:30100 instance:
watch: false config:
client:
serverUri: http://localhost:30113 refreshMode: 1
----结束