spring cloud config 结合 spring cloud bus实现配置自定的刷新
在线上环境中,有时候我们希望系统中的某些配置参数在修改后,可以立即生效而不用重新启动服务。由上一节我们知道,我们可以把配置文件统一放到配置服务中进行管理,这一节我们在配置中心中整合spring cloud bus并结合git 的webhook实现配置的自动刷新。
整合spring cloud bus后我们可以获取到一些新的端点:
POST /bus/refresh: 用于刷新配置
POST /bus/refresh?destination=spring.application.name:port 刷新具体的某个微服务,port和前面的name可以使用通配符 *
需求
实现系统中的配置的自动刷新
实现步骤(在上一节代码的基础上)
1、安装 erlang 和 rabbitmq, 需要注意 rabbitmq不同的版本需要不同的erlang的版本,参考链接 https://www.rabbitmq.com/which-erlang.html
2、config server 和 config client 端同时引入以下依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
3、需要动态刷新配置的地方加上 @RefreshScope 注解
此处是从配置中心获取 msg 这个字段的值,记住这个controller 的访问路径,下方演示需要用到
@RestController
@RefreshScope
public class PrintMsgController {
@Value("${msg}")
private String msg;
/**
* 打印msg消息
*
* @return
*/
@GetMapping("print/msg")
public String print() {
return msg;
}
}
4、找到 git 的远程仓库,配置 webhook,这里以 github为例
5、配置中心和配置客户端的代码 配置文件和上节差不多,唯一不同的是加入了 rabittmq 的配置
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
运行结果
解释:
1、演示 config server 的代码
2、演示 config client 的代码
3、服务注册中心上各个服务注册的情况
4、演示 webhook的配置(webhook配置的地址需要是外网可以访问的,我上方的例子是使用了一个内网穿透工具)
5、更新 git 仓库上的配置,看各个客户端是否都更新
6、取消webhook,然后开效果
7、在 chrome 浏览器中演示如何只更新某个具体的微服务或使用通配符更新
完整代码
配置动态刷新完整代码:https://gitee.com/huan1993/spring-cloud-parent/tree/master/config/config-bus-webhook
本文来自博客园,作者:huan1993,转载请注明原文链接:https://www.cnblogs.com/huan1993/p/15416175.html