Config配置中心的文件更新机制

前言

SpringCloud 是微服务中的翘楚,最佳的落地方案。

Spring Cloud Config 是一个解决分布式系统的配置管理方案,它包含了 server 和 client 两个部分。

server 用来获取远程的配置信息(默认为 Git 仓库),并且以接口的形式提供出去;

client 根据 server 提供的接口读取配置文件,以便于初始化自己的应用。
Git作为配置中心,将项目的配置文件放在远程,但为了更快的性能,一般会将git远程的信息同步到服务器(配置中心服务端)本地一份,那如何保证服务器本地和GIT远程的信息一致,就是我们本文要讨论的问题。

其中在远程git中更新了配置信息后,是怎么反应到微服务项目中的,分2种情况:自动更新和手动更新,其中手动更新又分2种情况,即重新启动微服务项目和手动调用刷新接口;自动刷新则通过WebHooks

1、手动更新

1.1 重新启动项目更新

即git远程的配置文件更新后,在自动化流水线中重新启动该项目,重新去配置中心获取远程git的最新信息,此时也分2种情况:
如果重新启动配置中心服务的,即configserver,则会将使用该配置中心的所有项目的配置文件都从远程拉取最新的信息到本地;
如果重新启动某个微服务项目,则只会将该服务项目对应配置文件从远程拉取到本地,其他项目的配置文件并不会同步。
配置中心服务端configserver的配置信息如下:

spring:
  cloud:
    config:
      server:
        git:
          # 基于 http 协议的单仓库,每一个应用创建一个目录,每个目录下创建配置文件
          uri: ${GIT_URI:http://xxxx/config.git}
          search-paths: '{profile}'
          # 配置的 Git 仓库基于 http 协议的,必须配置用户名和密码
          username: ${GIT_USERNAME:config_server}
          password: ${GIT_PASSWORD:config@123}
          # 本地仓库目录设定
          basedir: /config-repos-tmp
          # 本地仓库如果有脏数据,则会强制拉取(默认是false)
          force-pull: true
          # 配置中心启动后从 GIT 仓库下载,uri配置中使用了 {application} 作为仓库名,这里要使用默认值false,否则启动报错.
          clone-on-start: false

其中basedir定义了将远程git仓库的文件拉取到本地的路径,如果没有配置,则每次去远程获取
force-pull为true,则是强制拉取远程,以远程为准。经测试,如果不配置,或配置为false,当手动修改配置中心服务端本地的信息后,与git远程信息有冲突时,是不会将远程信息同步到本地的,以服务端本地的为主。如果配置为true,则git远程会覆盖服务器本地的信息。

1.2 Spring Cloud Bus+RabbitMQ,手动调接口更新,需要以下工作:

首先我们需要在config项目和使用配置中心的每个微服务项目中,增加Spring Cloud Bus依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

然后在config项目和使用配置中心的每个微服务项目的配置文件中,配置rabbitmq的地址以及用户密码,修改config服务的配置如下:

spring:
  rabbitmq:  
    host: 192.168.xxx.xxx
    port: 5672
    username: admin
    password: admin

最后在有使用配置文件属性信息的类上加上这个注解,@RefreshScope // 这个注解声明了刷新配置的范围,如果使用config配置类的话,就声明到配置类上即可。
手动调接口:http://ip:8888/actuator/bus-refresh即可将信息同步到服务端本地。

2 、 WebHooks自动刷新

到这里代表我们已经成功集成了RabbitMQ以及Spring Cloud Bus进行配置文件的动态刷新,但是我们目前依旧需要手动去访问Bus用于刷新配置的接口,才能完成配置文件的动态刷新。我们希望的是,当git仓库的文件更新时就能够实现动态刷新配置文件。要实现这个功能就需要Git仓库能够在配置文件更新后,自动调用Bus用于刷新配置的接口。那么要怎么实现这个功能呢?这就需要用到WebHooks了,好在码云和GitHub都支持WebHooks,我们只需要配置一下接口地址即可。这也是我们本小节需要演示的。
注:SpringCloud需要2.0.0以上的版本才开始支持码云的WebHooks,低版本对码云的WebHooks不兼容
首先打开仓库的管理界面,选择WebHooks,并点击右上角的添加:


WebHooks.png

然后输入相应的配置信息,注意这里不是配置/actuator/bus-refresh接口了 ,而是配置 spring cloud config 里特定给WebHooks调用的/monitor接口。至于域名,我这里使用了内网穿透的地址:

monitor.png

添加完成后,点击右上角的测试,返回结果如下,则代表测试通过:


测试.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容