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參數來指定需要更新配置的服務或實例。

      

 

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