逐个刷新
在Spring Cloud Bus 及 自动更新 config client 配置文件功能中,访问 config-server 的 bus-refresh 接口就能刷新各个 config-client 配置文件,看起来没有什么问题,也很方便,但是当我有一万个服务,而只要刷新其中的一些服务的配置文件时,这样配置就有点“费功夫”了,当然通过添加 actuator 依赖,使用 @RefreshScope 注解的内容没有这个问题。但是这样要在项目中用到配置文件的地方都加上 @RefreshScope 注解。如果只想刷新单个微服务,怎么办呢,可以通过以下配置解决问题。
- 首先,给每个 config-client 配置一个 eureka 的 instance-id,用
名字:端口
来配置
eureka.instance.instance-id=${spring.application.name}:${server.port}
把 config-client 打包,打包完成后利用不同端口,模拟多个微服务,然后像下面这样启动多个 config-client。
config-client\target>java -jar config-client-0.0.1-SNAPSHOT.jar
config-client\target>java -jar config-client-0.0.1-SNAPSHOT.jar --server.port=8083
(1)直接访问 bus-refresh 的情况
访问两个服务的 hello 接口:
修改 client-test.properties,并且使用 bus-refresh 更新
提交到 Github
bus-refresh 刷新
再次访问服务:
可以看到 8082 和 8083 端口的服务都刷新了。这是 config client 集体刷新
(2)bus-refresh 单独刷新一个服务:
再次修改 client1-test.properties
提交到 Github
bus-refresh/instance-id 刷新
访问 8082 和 8083 的 hello 接口
可以看到 8083 端口的服务配置刷新了,而 8082 端口的服务没有刷新,就是在原来的http://localhost:8081/actuator/bus-refresh
基础上,拼接上参数 /client1:8083
访问
http://localhost:8081/actuator/bus-refresh/client1:8083
就可以刷新指定的服务,与全量刷新比较,首先要设置 Eureka 的 instance-id,然后访问 bus-refresh 拼接上 instance-id 即可。这就是 Spring Cloud Bus 逐个刷新 Spring Cloud Config 服务的功能