一、 消息总线简介
1、什么是Spring Cloud Bus
Spring Cloud Bus集成了市面上常见的RabbitMQ和Kafka等消息代理。其会连接微服务系统中所有拥有Bus总线机制的节点,当有数据变更的时候,会通过消息中间件使用消息广播的方式通知所有的微服务节点同步更新数据。(如:微服务配置更新等)
二、 基于消息总线实现热刷新
基于Bus消息总线实现热刷新功能,需要在所有的Eureka Client端应用中增加spring-cloud-starter-bus-amqp依赖,这个依赖是消息总线集成的RabbitMQ消息同步组件。此启动器包括actuator启动器(spring-boot-starter-actuator,基于消息总线的热刷新同样是通过actuator实现的)。
<!--热刷新启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--消息总线-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
1、设计方案
2、配置文件
spring:
cloud:
config:
name: application
uri: http://localhost:1234/
label: master #默认为主分支master
#profile: default #默认为default
#消息总线功能依赖于rabbitmq
rabbitmq:
host: 192.168.80.128
username: bjsxt
password: bjsxt
port: 5672
# 热刷新
#management:
# endpoints:
# web:
# exposure:
# include: refresh
server:
port: 8082
#开启消息总线
management:
endpoints:
enabled-by-default: true
web:
exposure:
include: bus-refresh
3、测试热刷新
消息总线Bus基于Actuator对外提供了热刷新服务,
服务地址是:http://ip:port/actuator/bus-refresh。
此服务只能使用POST方式请求,可以使用Postman测试。
也可以部分热刷新。地址是: http://ip:port/actuator/bus-refresh/{destination}
destination写法: 服务名称:端口号
服务名称和端口号可以使用’‘作为通配符。代表0~n个字符。
如:服务名称有 - app-order app-portal app-item app-cart
每个服务的端口包括: 8081 8082 8083 8091 8092 8093
刷新方式可以有:
http://ip:port/actuator/bus-refresh/app-order: 刷新所有的order服务
http://ip:port/actuator/bus-refresh/app-* 刷新所有app-开头的服务
http://ip:port/actuator/bus-refresh/app-order:808* 刷新所有app-order的808开头的端口服务。
触发规则:局部热刷新,接收/bus-refresh请求的节点,一定刷新。其他节点,根据destination规则决定是否刷新。