06 使用/actuator/bus-refresh端點手動刷新配置 + 使用Spring Cloud Bus自動更新配置


  不能自動更新配置。這里將介紹手動自動兩種方式來更新配置:

  

 

   

   上圖的架構將Config Server也納入到消息總線中,並使用Config Server的/actuator/bus-refresh端點來實現配置的刷新。 這樣做的好處就是,各個微服務僅僅需要關注自身的業務,而不需要承擔刷新配置的職責了。

  使用@RefreshScope + /actuator/bus-refresh端點手動刷新配置

  手動刷新其實並不需要接入消息對了,@RefreshScope是關鍵。這里是為了下面做自動刷新才引入了消息隊列

  Step1. 添加依賴

  根據上圖的描述知道 Config Server和微服務都需要接入到消息隊列中,Config Server 配置中心服務端 pom文件引入依賴

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

  order (同時也是config client)同樣的也需要加入上述依賴

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

  Step2. 配置RabbitMQ信息

  config (Config Server) 的 application.yml增加 RabbitMQ的配置信息如下:

 

spring:
    application:
       name: config
    cloud:
      config:
        server:
          git:
            uri: https://github.com/XiangYuXiHu/spring-cloud-config-center
            username: XiangYuXiHu
            password: 
            basedir: D:/cloud-config
            force-pull: true
    rabbitmq:
       host: 192.168.223.139
       username: guest
       password: guest
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8762/eureka/
server:
  port: 8082

 

  Config Client的配置文件增加 RabbitMQ的配置信息如下,放到了遠端的Git

  通過config server 訪問order 使用的配置文件dev分支的信息

Config Server暴露/actuator/bus-refresh端點

  根據上面的架構,是通過Config Server暴露出來的endpoints來請求Config Server ,所以需要在Config Server暴露端點,這里設置默認全部暴露出來

  確保依賴中有spring-boot-starter-actuator 。 因為 spring-cloud-config-server依賴了spring-boot-starter-actuator ,故無需重復引用。

#actuator  啟用所有的監控端點 “*”號代表啟用所有的監控端點,可以單獨啟用,例如,health,info,metrics
#  spring boot 升為 2.0 后,為了安全,默認 Actuator 只暴露了2個端點,heath 和 info
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: ALWAYS

  啟動RabbitMQ

  啟動config server微服務: 啟動成功后,訪問 http://localhost:8762/

  登錄RabbitMQ查看

 

  可以看到config自動創建一個隊列 。 (觀察啟動日志,可以看到創建過程 )

  啟動order 微服務

  啟動成功后查看注冊中心

  看下消息隊列中的隊列:

   order微服務連接RabbitMQ,也自動創建了一個消息隊列

Order中寫個測試類 驗證自動刷新

@RefreshScope 重點是這個注解

@RestController
@RefreshScope
public class ConfigClientController {

    @Value("${env}")
    private String env;

    @GetMapping("/env")
    public String getValueFromGit(){
        return env;
    }
}

 

  在遠端Git上的配置為 dev,訪問下 http://localhost:8081/env

 

   將env的值修改為 dev-test,再次訪問下 http://localhost:8081/env

  居然沒有變化,手工刷新下 ,同時觀察config 和 order微服務的日志

curl -v -X  POST http://localhost:8082/actuator/bus-refresh

  再次訪問 http://localhost:8081/env

  已經更新為修改后的值

使用Spring Cloud Bus自動更新配置

  

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM