Skip to content

migrate cloud nacos 2 huaweicloud serviceomb

chengyouling edited this page Sep 24, 2024 · 1 revision

主要迁移步骤

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

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

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

删除 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也可以使用基于动态配置的流量特征治理。 基本开发流程也是

## 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}
Clone this wiki locally