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项目拉取配置文件,同时也会在本地缓存一份,默认存放地址为/tmpconfig-repo临时目录
  • cloud-client项目,用于从cloud-server项目获取配置信息,验证配置是否实时刷新

config-repo目录结构

spring-cloud-config + spring-cloud-bus实现动态刷新集群配置_第1张图片

  • 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配置详解

spring-cloud-config + spring-cloud-bus实现动态刷新集群配置_第2张图片

  • uri,即是git的clone地址
  • search-paths,即是配置中心config-repo项目下的一级目录
  • username,即为登陆git的用户名
  • password,即为登陆git的密码
  • force-pull,配置当本地目录与远程配置有冲突时是否强制拉取配置
    代码很简单,即为标准的spring-boot项目启动代码
    spring-cloud-config + spring-cloud-bus实现动态刷新集群配置_第3张图片
  1. 另外,本案例是使用rabbitmq来实现消息总线的功能,当然少不了其相关配置,如下:spring-cloud-config + spring-cloud-bus实现动态刷新集群配置_第4张图片
    (配置信息相对简单,此处不再说明)
  2. maven配置文件,除了config-server的依赖还需添加bus的相关依赖
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-bus-amqpartifactId>
        dependency>

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

注意:config-client的配置文件名为,bootstrap.yml,spring-boot项目默认bootstrap.yml加载先与application.yml。也好理解,只有先获取了配置信息,诸如@Value,${“param”}才能正常被注入值
spring-cloud-config + spring-cloud-bus实现动态刷新集群配置_第5张图片

  • 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.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-bus-amqpartifactId>
        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两个端口查看,访问正常
    spring-cloud-config + spring-cloud-bus实现动态刷新集群配置_第6张图片
    spring-cloud-config + spring-cloud-bus实现动态刷新集群配置_第7张图片
  • 此时修改并push配置中心的属性值,修改为from=git-dev-4.0
  • 此时需要post访问config-server的/bus/refresh接口进行刷新配置
    spring-cloud-config + spring-cloud-bus实现动态刷新集群配置_第8张图片
  • 再次访问client的两个实例
    spring-cloud-config + spring-cloud-bus实现动态刷新集群配置_第9张图片
    spring-cloud-config + spring-cloud-bus实现动态刷新集群配置_第10张图片

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

Over~

你可能感兴趣的:(Spring-Cloud,Spring,Git,Rabbit-MQ,工具使用)