美文网首页
Config配置中心的文件更新机制

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

作者: kobe0429 | 来源:发表于2021-05-28 16:06 被阅读0次

    前言

    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

    相关文章

      网友评论

          本文标题:Config配置中心的文件更新机制

          本文链接:https://www.haomeiwen.com/subject/faussltx.html