spring-cloud-config + spring-cloud-bus实现动态刷新集群配置

本文以 rabbitmq来实现消息传递

安装 rabbitmq请移步:http://blog.csdn.net/red_sheeps/article/details/78386303 以下 demo代码详见:https://github.com/GloryXu/test-spring-boot

准备项目及模块

  • 首先得需要一个配置中心,就是git的一个专门存放配置的项目,如:config-repo,用于cloud-server拉取配置
  • cloud-server项目必不可少,用以从git项目拉取配置文件,同时也会在本地缓存一份,默认存放地址为/tmp
  • cloud-client项目,用于从cloud-server项目获取配置信息,验证配置是否实时刷新

config-repo目录结构

  • config-repo实际上就是config-server的git.uri配置(以下说明详见config-server配置)
  • didispace和msg_dispatcher即为git.search-paths配置,扫描所有的配置文件目录
  • XXXX-dev.properties、XXXX-test.properties即为配置具体配置文件,后面的dev和test相信大家也都猜到,就是环境信息,命名规范才能正确找到并加载配置文件信息
  • 还有一个信息,项目的分支信息,因目录结构不好体现,后续config-server再行说明

spring-cloud-server配置详解

  • uri,即是git的clone地址
  • search-paths,即是配置中心config-repo项目下的一级目录
  • username,即为登陆git的用户名
  • password,即为登陆git的密码
  • force-pull,配置当本地目录与远程配置有冲突时是否强制拉取配置 代码很简单,即为标准的spring-boot项目启动代码
  1. 另外,本案例是使用rabbitmq来实现消息总线的功能,当然少不了其相关配置,如下:

(配置信息相对简单,此处不再说明)

  1. maven配置文件,除了config-server的依赖还需添加bus的相关依赖
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>

config-client项目配置及代码示例

注意:config-client的配置文件名为,bootstrap.yml,spring-boot项目默认bootstrap.yml加载优先与application.yml。也好理解,只有先获取了配置信息,诸如@Value,${"param"}才能正常被注入值 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5NWc7Gmj-1569687471452)(http://img.blog.csdn.net/20171029173658724?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcmVkX3NoZWVwcw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)]

  • spring-application-name,应用名与配置中心{application}-dev.properties中的application对应
  • uri,默认的搜寻地址为localhost:8888,其他的config-server地址可自行替换
  • profile,即为配种中心的环境标志,与didispace-{profile}.properties中的profile相对应
  • label,即为git项目中的分支,默认值为master
  • 对于客户端也需要加上rabbitmq的配置信息(同config-server)
  • maven依赖如下,因为需要refresh接口刷新配置,所以需要加上actuator的依赖
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>

验证

  • 启动client两个实例及config-server项目
java -jar target/config-client-0.0.1-SNAPSHOT.jar --server.port=8887
java -jar target/config-client-0.0.1-SNAPSHOT.jar --server.port=8886
  • demo中写一个简单的restful接口用于返回配置文件中的信息
@Value("${from}")
    private String from;

    @RequestMapping("/from")
    public String from() {
        return this.from;
    }
  • 在配置中心config-repo的didispace-dev.properties配置文件中添加该属性 from=git-dev-3.0
  • 分别访问8887和8886两个端口查看,访问正常
  • 此时修改并push配置中心的属性值,修改为 from=git-dev-4.0
  • 此时需要post访问config-server的/bus/refresh接口进行刷新配置
  • 再次访问client的两个实例

看到from访问的接口返回值均已改变。

觉得有帮助,欢迎关注

本文分享自微信公众号 - 爪哇之路(java_roads)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券