一、spring cloud bus 刷新配置
1.1、前言
- 在上一章节springcloud核心技术之全局配置(四) 中,我们虽然实现了配置文件的全局配置,但是传统更新配置需要重启的问题仍然没有解决;本章我们就使用spring cloud bus来解决这个问题。
1.2、架构概要
- spring cloud bus一般需要与消息中间键配合使用,我们这里主要采用的是RabbitMQ;架构如下:
1.3、环境准备
1、方式一:
- windows下面安装Docker
- 通过 Docker安装RabbitMQ;安装向导
2、方式二:这里我们采用的是第二种方式
- Windows环境下RabbitMQ的启动和停止命令
- 注意:RabbitMQ客户端默认登陆账号密码都是guest;访问路径是http://localhost:15672/
二、实操
1.1、config-server端
- 采坑:config-server端的server.port配置一定要写在主配置文件中,不能写在远程仓库中,否则后续的bus-flush无法刷新
1、添加bus依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
2、添加配置
- 这个配置目的是为了让我们之后能访问到 /actuator/bus-refresh 接口,bus-refresh的主要作用就是刷新消息
management: endpoints: web: exposure: include: "*"
1.2、config client端:以product-server为例
1、添加bus配置
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
2、config client端还要在获取刷新配置部分加上标签:@RefreshScope
- @RefreshScope作用:是spring cloud提供的一种特殊的scope实现,用来实现配置、实例热加载
@RestController @RefreshScope public class ConfigController { @Value("${serverName}") private String serverName; @GetMapping("/serverName") public String serverName(){ return serverName; } }
2、分别重启config-server和product-server服务以及注册中心
- 打开RabbitMQ客户端,观察到有两个消息分别是config-server和product-server服务的消息
3、去GitHub仓库修改product-server的配置
- 将原先的serverName:product-server改为serverName:ProductServer
4、访问product-server的serverName配置
- 我们发现serverName的值并没有发生改变
5、使用bus-refresh刷新一下配置
6、重新访问的结果:更新了配置
- 虽然能够实现动态更新了,但是每一个更新都要使用postman进行一次bus-refresh,很不方便;所以我们需要集成WebHooks实现动态更新
1.3、 集成WebHooks实现动态更新
1、natapp内网穿透映射本地的域名
- natapp官网
- 选择免费渠道:
- 端口设置:
- 下载并启动客户端:
- 得到一个免费的域名:注意测试期间客户端不能关闭
2、config-server服务端添加依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-monitor</artifactId>
</dependency>
3、GitHub配置WebHooks
4、先删除本地缓存的配置文件夹:可选
5、修改把product-server的serverName配置
6、重启项目测试:config-server端能刷新,但是config-client端依然不能刷新
-
解决方案:在config client端(product-server)加入如下配置
vcap: application: instance_index: ${spring.cloud.config.profile}
7、重启项目测试:
- 修改GitHub远程仓库的配置:
- 查看后台配置是否更改:已经更改