目录
-
-
- 使用springcloud bus刷新服务配置
-
- 集成springcloud bus
- 手动触发刷新
- 自动触发配置更新
- 流程
-
bus 消息总线,发生指定事件时,可以通过单播或广播通知指定的接口、服务,比如git仓库更新了服务配置,可以通知服务及时刷新配置。
springcloud bus需要搭配消息中间件rabbitmq或kafka使用,使用消息队列存储消息。
对每个config client都进行如下操作,rabbitmq、kafka使用一种即可。
1、添加依赖
<!--不少监控组件中都内置了actuator,如果已有则不必添加-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--rabbitmq或kafka-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-kafka</artifactId>
</dependency>
2、yml
spring:
#rabbitmq的配置
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest
password: guest
#或kafka的配置
cloud:
stream:
kafka:
binder:
#有多个时逗号分隔
brokers: 127.0.0.1:9092
#暴露端点,主要是暴露 /actuator/bus-refresh/ 端点
management:
endpoints:
web:
exposure:
include: "*"
3、在要自动刷新的类上加@RefreshScope
@Controller
@RefreshScope //加springcloud的注解@RefreshScope
public class TestController {
@Value("${user.name}")
private String name;
@GetMapping("/test")
@ResponseBody
public String test(){
return name;
}
}
打开postman,向任意一个config client节点发送一个post请求,url如下
#config client节点的ip:port。刷新所有config client的配置
http://127.0.0.1:7503/actuator/bus-refresh
#只刷新指定服务(user-server)的所有节点的配置
http://localhost:7503/actuator/bus-refresh/user-server
#只刷使用指定端口(7509)的指定服务(user-server)的配置
http://localhost:7503/actuator/bus-refresh/user-server:7509
- url即postman中的url,注意要使用公网ip,linux的ifconfig、win的ipconfig得到的都是内网ip,可以用 curl cip.cc 查看当前机器的公网ip。
- 密码是明文传输,尽量使用签名秘钥代替密码,更安全。
- 手动触发、自动触发都是执行post请求,通知某个config client向mq投递一条消息。
- 一个config client节点对应mq上的一个队列(注意是节点,不是服务),mq将消息路由到此次将更新配置的config client节点对应的队列中。
- config client节点消费消息、更新配置文件。