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


上圖的架構將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自動更新配置
