三、 Bus总线
1. 理念
- 每次修改config文件,需要手动刷新client server的配置,比较麻烦
- 假如client server端比较多,执行难度较大
1. 远程配置中心文件修改
2. config server整合消息中间件,发送一个topic主题,表明配置已经更新
3. 各个client srver订阅该topic主题(只支持rabbitmq或者kafka)
4. 运维执行curl:"config server",刷新所有客户端的数据;
2. 案列演示
- 按照官网的方式进行消息中间件的 bus-amqo的整合,工程会自动进行消息的发送和整合作用
2.1 Config Server
<!--web模块的两个依赖-->
<!--配置中心依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!--bus消息总线整合rabbitmq-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
</dependencies>
server:
port: 9001
spring:
cloud:
config:
server:
git:
uri: https://github.com/bootscata/config-server
# rabbitmq的相关配置
rabbitmq:
host: 60.205.229.31
port: 5673
username: guest
password: guest
# 监控bus-refresh路径
management:
endpoints:
web:
exposure:
include: 'bus-refresh'
2.2 Client Server
bootstrap.yaml
- 这些信息放在application.yaml,服务启动就会报错,必须放在bootstrap.yaml中;
spring:
cloud:
config:
label: master # git对应的仓库分支
name: datasource # 文件的名字
profile: prod # 文件的profile属性
uri: http://localhost:8000 # 去config server工程去间接取
# rabbitmq的相关配置
rabbitmq:
host: 60.205.229.31
port: 5673
username: guest
password: guest
# 暴露监控点
management:
endpoints:
web:
exposure:
include: "*" # 起到监控所有作用
测试类
@RestController
@RefreshScope
public class ConfigConsumerController {
}
2.3 Auto Updating
- 全量刷新
1. 在github上更新文件,config server可以立即获取到实时信息
2. cmd窗口: 只对config server的端口和ip进行刷新
curl -X POST "http://localhost:8000/actuator/bus-refresh"
3. 所有client server数据都会更新
- 定点刷新
# 目标client server:spring.application.name: server.port
curl -X POST "http://localhost:8000/actuator/bus-refresh/client-first:9001"