Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Spring Cloud Alibaba + Nacos 如何迁移到 Spring Cloud Huawei + CSE #10

Open
liubao68 opened this issue Mar 17, 2021 · 0 comments
Open

Comments

@liubao68
Copy link
Collaborator

liubao68 commented Mar 17, 2021

主要迁移步骤

  • 修改pom文件。移除Spring Cloud Alibaba和Nacos相关依赖,并替换为Spring Cloud Huawei相关依赖。
  • 修改bootstrap.yml文件。将Spring Cloud Alibaba和Nacos相关配置, 修改为Spring Cloud Huawei相关配置。
  • 其他修改
    • yaml配置文件迁移
    • 网关流控迁移
    • 应用隔离和环境隔离

basic项目 提供了迁移后的应用示例,迁移过程中涉及到的POM文件修改、bootstrap.yml文件修改等内容,都可以参考这个项目。

修改pom文件

  • dependencyManagement

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>aliyun-spring-boot-dependencies</artifactId>
            <version>{project-version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

修改为

  <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>
  • dependencies

排除Spring Cloud Alibaba和Nacos相关依赖,并替换为Spring Cloud Huawei相关依赖。这了不详细描述删除那些配置。Spring Cloud Huawei 的配置比较简单, 只需要引入一个 starter 即可。 需要主意网关和微服务的 starter 不同。

微服务starter

    <dependency>
      <groupId>com.huaweicloud</groupId>
      <artifactId>spring-cloud-starter-huawei-service-engine</artifactId>
    </dependency>

网关starter

    <dependency>
      <groupId>com.huaweicloud</groupId>
      <artifactId>spring-cloud-starter-huawei-service-engine-gateway</artifactId>
    </dependency>

修改bootstrap.yml文件

删除 Spring Cloud Alibaba和Nacos相关配置,并增加Spring Cloud Huawei相关配置。 这里不详细描述删除的内容, 增加的内容如下:

spring:
  application:
    name: basic-provider
  cloud:
    servicecomb:
      discovery:
        enabled: true
        watch: false
        # address: https://cse.cn-south-1.myhuaweicloud.com
        address: http://127.0.0.1:30100
        appName: basic-application
        serviceName: ${spring.application.name}
        version: 0.0.1
        healthCheckInterval: 30
      config:
        # serverAddr: https://cse.cn-south-1.myhuaweicloud.com
        serverAddr:  http://127.0.0.1:30113
        fileSource: provider.yaml
        watch:
          delay: 10000

      # Configure AK/SK credentials if needed. Default not enabled.
      credentials:
        enabled: false
        accessKey: your ak
        secretKey: your sk
        akskCustomCipher: defau

其他修改

yaml配置文件迁移

Nacos通过data-id可以指定yaml格式的配置文件。 而CSE第一代引擎只支持key-value的配置,第二代引擎支持更加丰富的配置格式。 本文说明如何用一代引擎提供yaml格式的文件配置。 二代引擎上线后可以直接使用yaml格式 ,就不需要这个方式了。

spring:
  cloud:
    servicecomb:
      config:
        fileSource: configruation1.yaml,configruation2.yaml

bootsrap.yml文件中指定上述配置项, 每个fileSource对应配置中心的一个key,建议以yaml文件名作为key名,例子中定义了两个key:configruation1.yaml和configruation2.yaml 。 然后需要在配置中心录入两个key对应的yaml内容。

网关流控迁移

Spring Cloud Alibaba集成Sentinel以后, 可以通过实现一个 GlobalFilter, 集成sentinel的功能。 Spring Cloud Huawei也可以使用基于动态配置的流量特征治理。 基本开发流程非常简单,只需要在路由Filter中使用该功能即可

spring:
  main:
    web-application-type: reactive
  cloud:
    gateway:
      routes:
        - id: consumer
          uri: lb://basic-consumer
          filters:
            - name: governance  ## 使用基于动态配置的流量特征治理
          predicates:
            - Path=/**
  • 使用动态配置的方式下发流控规则
## rate limiting configuration
servicecomb:
  matchGroup:
    allOperation: |
      matches:
        - apiPath:
            prefix: "/"
  rateLimiting:
    allOperation: |
      rate: 100

流控规则也可以统一放到配置文件,通过配置中心下发。 参考“yaml配置文件迁移”章节的说明。

应用隔离和环境隔离

Spring Cloud Alibaba的Nacos有namespace和group等概念支持逻辑隔离, Spring Cloud Huawei 也支持应用隔离和环境隔离,不同的应用和环境是无法相互发现的,配置也支持不同的下发粒度。配置项:

server:
  env: production # 默认为空, 可以配置 production, testing, development等
spring:
  application:
    name: basic-provider
  cloud:
    servicecomb:
      discovery:
        appName: basic-application # 应用名称。应用名称相同的微服务可以相互调用。 否则不能发现调用。 配置也可以定义应用生效,或者全局生效。
        serviceName: ${spring.application.name}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant