文档首页 > > 开发指南> 微服务开发指南> 对接微服务应用>

Java Chassis接入CSE

Java Chassis接入CSE

分享
更新时间:2021/03/29 GMT+08:00

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

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

前提条件

  • 已基于Java Chassis开发好了微服务应用,请参考开发微服务应用
  • 版本要求:Java Chassis 2.1.6及以上版本。
  • 本文假设您的项目使用了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>

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

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

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

    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最新的功能要求。如果期望后续升级新版本保持稳定而不是跟随CSE演进,您可以考虑将配置项写到您自己的“microservice.yaml”文件中。

  2. (可选)配置AK/SK。

    如果使用微服务引擎专业版,需要配置AK/SK;如果使用微服务引擎专享版,不需要配置AK/SK,可以跳过这个步骤。

    AK/SK在“microservice.yaml”中配置,ServiceComb默认提供明文配置,支持用户自定义加密存储方案。

    • 明文方法,在“microservice.yaml”文件中增加配置。
        servicecomb:  
          credentials:
            accessKey: AK
            secretKey: SK
            project: 项目名称
            akskCustomCipher: default
    • 自定义实现,首先实现接口“org.apache.servicecomb.foundation.auth.Cipher”,里面有两个方法:
      • String name()

        这个是servicecomb.credentials.akskCustomCipher的名称定义,需要配置在配置文件中。

      • char[] decode(char[] encrypted)

        解密接口,对secretKey进行解密后使用。

      实现类需要声明为Bean,比如:

      @Component
      public class MyCipher implements Cipher

      然后在“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. (可选)配置RBAC。

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

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

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

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区论坛频道来与我们联系探讨

智能客服提问云社区提问