Apollo配置中心迁移Consul落地技术方案(Spring项目)

Apollo配置中心迁移Consul落地技术方案(Spring项目)

1、前言

实习接到的第一个需求,网上找遍资料也没有Apollo迁移Consul的具体文章,所以还是自己动手来做。Apollo相对Consul提供了更多方便实用的api,所以在代码方面需要改动的地方比较多,这也是本文的重点。公司相关信息已做隐私处理。

2、依赖导入

//SpringCloud集成Consul服务注册发现
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
//SpringCloud集成Consul配置中心
<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
//在单元测试中嵌入式运行Consul库
<dependency>
    <groupId>com.pszymczyk.consul</groupId>
    <artifactId>embedded-consul</artifactId>
</dependency>

3、Bootstrap配置

仅做参考,具体参数待定

spring:
	profiles:
		active: dev
  cloud:
    consul:
      host: ${
   CONSUL_HOST:127.0.0.1}
      port: ${
   CONSUL_PORT:8500}
      config:
        prefix: config
        default-context: orderService
        enabled: ${
   CONSUL_CONFIG_ENABLED:true}
        format: YAML
        data-key: ${
   SPRING_CONSUL_CONFIG_FILE:data}
        failFast: true
        profileSeparator: '-'
        overrideNone: false
        watch:
          enabled: true
          delay: 1000
          wait-time: 30

这段配置表示读取配置中心下config/orderService-dev的配置,且如果没有指定读取的key就由data作为key。

对于环境的区分,Consul采用字符串切割的形式,默认是",“,如上配置我改成了”-“。假如config文件夹下分别由"orderService-dev”,“orderService-prod”,“orderService-test”,“orderService”,我们可以通过更改active配置项来选择不同的Consul文件夹,从而加载不同的配置,默认加载"orderService",即没有指定环境。

4、配置项的迁移

原Apollo的配置是依据应用、环境、集群进行了配置划分

app:
  id: ${
   APOLLO_APP_ID:aaabbb123456789}
apollo:
  meta: ${
   APOLLO_CLUSTER:http://zheshiyigelianjie.com}
  cluster: ${
   APOLLO_META:default}
  cacheDir: ./data/settings/
  bootstrap:
    enabled: true

而在Consul中,不同纬度的区分则是文件夹层级的区别,我们只需要按照原Apollo的纬度创建一一对应的文件夹,类似于"/应用-环境/集群"的格式即可。

需要注意的是,Consul不支持json格式的Value值输入,也就是,只要被"{}“或”[]"包起来的Value必须要用单引号圈起来。

jsonConfig2:
  arrayList: '["zhangsan","lisi","wangwu"]'

关于json输入,Apollo可以直接读取,会在下面代码改造部分讲到。

5、代码改造

代码改造这部分,我将其划分为需要改造和不需要改造的部分

5.1、普通注入(不需要改造)

普通注入的代码主要分为三种,一种是在applica.yml文件中,如下代码:

SERVER_IP: ${
   spring.cloud.client.ip-address}
server:
  port: ${
   SERVER_PORT:8080}
  ip: ${
   SERVER_IP}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值