一、SpringCloud Bus消息总线简介
在微服务架构体系中,我们通常会使用轻量级的消息代理(MQ)来构建一个共用的消息系统,让所有的微服务节点都连上来。由于该系统中的话题会被所有微服务节点订阅和消费,因此成为:消息总线。
可以利用消息总线方便的实现统一的配置管理和配置动态刷新。
目前,SpringCloud中的SpringCloud Bus技术就实现了消息总线的功能,其底层默认是采用RabbitMQ和Kafka来作为消息代理。
利用SpringCloudBus来实现配置动态刷新的流程图:
二、手动刷新
1、安装mq(docker中)
拉取镜像
docker pull rabbitmq:3-management
创建容器
docker run \
-e RABBITMQ_DEFAULT_USER=guest \
-e RABBITMQ_DEFAULT_PASS=guest \
--name mq \
--hostname mq1 \
-p 15672:15672 \
-p 5672:5672 \
-id \
rabbitmq:management
2、在ConfigServer的pom.xml中引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-bus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
3、修改ConfigServer的application.yml文件
添加两部分内容:
- RabbitMQ地址
- 开启refresh端口
server:
port: 12580
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://gitee.com/Rrx-w/cloud-config.git # git仓库地址
# username: # 如果有用户名和密码需要加上
# password:
rabbitmq:
host: 192.168.200.150
username: guest
password: guest
port: 5672
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka # eureka地址
management:
endpoints:
web:
exposure:
include: bus-refresh
4、配置ConfigClient
在user-service的pom.xml中引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-bus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
<!-- 如果之前没有引过, 也要引入监控依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
修改user-service的bootstrap.yml文件,添加MQ地址后
eureka:
client:
service-url:
# defaultZone: http://localhost:10086/eureka,http://localhost:10087/eureka
defaultZone: http://localhost:10086/eureka
spring:
application:
name: user-service
cloud:
config:
name: userservice # 配置文件的应用名称
label: master # 配置文件的分支名称
profile: dev # 环境名称
discovery:
enabled: true # 开启从注册中心获取配置中心地址
service-id: config-server # 配置中心的服务名称
rabbitmq:
host: 192.168.200.150
management:
endpoints:
web:
exposure:
include: "*" # 暴露refresh接口 会对外暴露一个接口:/actuator/refresh,调用该接口即可刷新配置
server:
port: 8081
测试
-
重启 config-server和user-service服务
-
修改Git仓库中的master分支下的userservice-dev.yml
-
在postMan工具中访问ConfigServer的刷新接口:http://localhost:12580/actuator/bus-refresh
-
访问接口:http://localhost:8081/hello/prop
三、自动刷新
gitee.com或者github.com这样的远程仓库,都提供了web hook功能,允许我们配置一个地址,当有代码提交时,远程库会向配置的地址发送一个POST请求
1、内网穿透
2、配置gitee中webHooks
这样直接添加会出错
设置内网穿透
3、提交修改文件测试
在configserver中添加一个过滤器,提前将request消息体的参数读取出来
4、测试
修改gitee中的配置文件
刷新测试