Spring Cloud Config 结合Rabbitmq、Spring Cloud Bus实现高可用的动态刷新配置

 

一、Spring Cloud Config 动态刷新配置

       spring-boot-starter-actuator模块包含了/refresh 刷新API。通过此API可以刷新获取到GIT里最新的配置。

        在config-client的pom文件中添加actuator依赖: 

     <dependency>                
        <groupId>org.springframework.boot</groupId>                
        <artifactId>spring-boot-starter-actuator</artifactId> 
     </dependency>

        修改GIT里的配置,然后在客户端调用/refresh API,  比如localhost:8080/refresh。 可以发现获取到最新的GIT配置。

       

二、RabbitMQ 消息总线

         我们已经可以通过/refresh和git的web Hook来实现配置的手动刷新,消息代理中间件可以将消息路由到一个或多个目的地。

 于是我们可以通过Spring Cloud Bus总线来将连接到总线的所有队列都能够实时的接收到GIT仓库中的应用配置。

 

三、 RabbitMQ  实现

         我们可以在RabbitMQ的客户端添加一个spring-cloud-bus-amqp 模块,需要注意的是,在此之前有添加过spring-boot-starter-actuator模块是必须的。

         1.在Config-client客户端添加Spring Cloud Bus依赖:

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

         2. 添加RabbitMQ配置:

spring.rabbitmq.port = 5672
spring.rabbitmq.username = admin
spring.rabbitmq.password = Aegon_2018
spring.rabbitmq.virtual-host = /fec-uat
spring.rabbitmq.host = rabbitmq-fec.dev

           

         3. 步骤:
          1) 先访问我们之前2个应用定义的/from请求,会返回当前的仓库的from 配置。

          2) 然后修改GIT配置,from=测试, 可以自定义内容。

          3) 然后发送一个POST请求到其中一个客户端的/bus/refresh上。
          4) 重新访问另外一个客户端,查看配置是否被修改。

        Spring Cloud Bus 的/bus/refresh  接口, 出发了总线上其他服务实例的/refresh。

          4. 指定刷新范围

          /bus/refresh 请求提供了destination参数,用来定位具体要刷新的应用程序。   destination 对应的值为rabbitmq中的不同Exchange。通过指定一个exchange,可以把一个exchange视为一个环境,来指定刷新该路由下绑定的所有队列。

          比如添加一个exchange属性配置:       

spring.rabbitmq.publisher-confirms = true
spring.cloud.stream.default-binder = rabbit
spring.cloud.stream.bindings.springCloudBusInput.destination = springCloudBus.fec-uat
spring.cloud.stream.bindings.springCloudBusInput.group = fec-uat-${spring.application.name}
spring.cloud.stream.bindings.springCloudBusOutput.destination = springCloudBus.fec-uat
spring.cloud.stream.bus.enabled = true
spring.cloud.stream.bus.trace.enabled = true

 

四、 架构优化         

       

       前面可以通过config-client客户端连接config-server的形式从config-server那儿拿到对应的配置,服务实例与config-server都是注册到eureka上的,因此可以在config-server模块中添加 spring-cloud-starter-bus-amqp模块,由config-server来担任从GIT中拉取配置和实时更新配置的职责。只要config-server的/bus/refresh触发了 ,那么指定destination的实例将会获取到最新的配置。

         改动如下:

         1. 在Config   Server中也引⼊Spring  Cloud  Bus依赖,将配置服务端也加⼊到消息总线中来。

         2. /bus/refresh 请求不在发送到具体服务实例上,⽽是发送给Config Server,并通 过 destination参数来指定需要更新配置的服务或实例。

      

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章