七、Spring Cloud Bus
Spring Cloud Bus是轻量级的通讯组件,其中一个核心思想是通过分布式的启动器对Spring Boot应用进行扩展,也可以用来建立一个或多个应用之间的通信频道。目前唯一实现的方式是用AMQP消息代理作为通道。
1、配置刷新流程
(1)、提交配置触发post请求给Config Server端的/bus/refresh接口。
(2)、Config Server端接收到请求并发送给SpringCloud Bus总线。
(3)、Sping Cloud Bus接收到消息并通知给其他连接的总线的客户端。
(4)、连接客户端接收到通知,请求Server端获取最新配置
(5)、全部客户端获取到最新的配置
Spring Cloud Bus整合了Java的事件处理机制和消息中间件,发送端(endpoint)构造事件event,将其publish到context上下文中(Spring Cloud Bus有一个父上下文,bootstrap),然后将事件发送到channel中(json串的message),接收端从channel中获取到message,将message转为事件event。然后将event事件publish到context上下文中,最后接收端(Listener)收到event,调用服务进行处理。整个流程中,只有发送/接收端从context上下文中取事件和发送事件是需要我们在代码中明确写出来的,其它部分都由框架封装完成。
2、配置
(1)、依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
(2)、application.yml配置RabbitMQ
spring:
rabbitmq:
addresses: 10.123.123.123:7003
username: mq_user
password: 123456
cloud:
bus:
# 用于开启/关闭全局刷新的Listener(默认:true)
refresh:
enabled: true
# 用于开启/关闭配置新增/修改的Endpoint(默认:true)
env:
enabled: true
# 用于开启开启/关闭AckRemoteApplicationEvent事件的发送(默认:true)
ack:
enabled: true
# 用于开启/关闭消息记录Trace的Listener(默认:true)
trace:
enabled: true