Version: Next
全局广播动态刷新
全局广播设计思想
- 利用消息总线触发一个 Config Client 的
/bus/refresh
,从而刷新所有 Config Client 的配置 - 利用消息总线触发一个服务端 Config Server 的
/bus/refresh
,从而刷新所有 Config Client 的配置 - 触发服务端 Config Server 的方式比较好,因为触发一个
Config Client
的模式
具有以下缺点
:- 打破了微服务的职责单一性
- 破坏了微服务各节点的对等性
- 有一定局限性,微服务迁移时,许多配置如网络地址会发生变化
改造 Config Server 3344
改造
cloud-config-center-3344
配置中心服务端
添加消息总线支持
POM
添加
starter-bus-amqp
RabbitMQ 依赖
- RabbitMQ依赖
- 完整依赖
<!-- 添加消息总线RabbitMQ支持--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId></dependency>
YAML
- 增加
RabbitMQ
设置- 增加暴露 bus 刷新配置端点设置
server:port: 3344spring:application:name: cloud-config-centercloud:config:server:git:#uri: git@gitee.com:ceskykrumlov/springcloud-config.git # ssh方式,不支持opensshuri: https://gitee.com/ceskykrumlov/springcloud-config.git##搜索目录.这个目录指的是github上的目录username: banbanzhichinimen@qq.com # 你的github / gitee 账户 配合 https,ssh方式不需要password: 680721sx # 你的 github/gitee 密码 配合 https,ssh方式不需要search-paths:- sprincloud-config##读取分支label: master#rabbit相关配置 15672是web管理界面的端口,5672是MQ访问的端口rabbitmq:host: localhostport: 5672username: guestpassword: guesteureka:client:service-url:defaultZone: http://eureka7001.com:7001/eureka/#rabbitmq相关设置 ,暴露 bus刷新配置的端点 actuatormanagement:endpoints:web:exposure:include: 'bus-refresh'
新建 Config Client 3366
参照
3355
创建一个3366
- POM、bootstrap.yml、主启动类、Controller 都来一份
- Controller 方法响应的字符串中,可以加上端口号,用来区分
改造两个 Config Client
3355
、3366
的 pom 都添加 RabbitMQ Maven 依赖3355
、3366
都修改bootstrap.yml
添加RabbitMq
配置
- 3355 bootstrap.yml
- 3366 bootstrap.yml
server:port: 3355spring:application:name: config-clientcloud:#Config客户端配置config:label: master #分支名称name: config #配置文件名称profile: dev #读取后缀名称 上诉3个综合就是 master分支上 config-dev.ymluri: http://localhost:3344 # spring cloud config server urirabbitmq:host: localhostport: 5672username: guestpassword: guesteureka:client:service-url:defaultZone: http://eureka7001.com:7001/eureka/#暴露 actuator 监控端点 让配置修改可以被监控management:endpoints:web:exposure:include: "*"
测试
- 启动注册中心
7001
- 启动配置中心服务端
3344
- 启动配置客户端
3355
、3366
- 在
Github / Gitee
上修改远程配置文件config-dev.yml
把版本号version
改个值,提交 (这里我原先是5
,改成12
) - 先查看一次值
http://config-3344.com:3344/master/config-dev.yaml
查出来是12
localhost:3355/configInfo
查出来是5
localhost:3366/configInfo
查出来是5
- 使用
POST
请求配置中心服务端,进行刷新curl -X POST "http://localhost:3344/actuator/bus-refresh"
,此处的 path/bus-refresh
就是配置在 3344 yml 中暴露的地址 - 再查看一次值
http://config-3344.com:3344/master/config-dev.yaml
查出来是12
localhost:3355/configInfo
查出来是12
响应3355: master branch,springcloud-config/config-dev.yml version=12
localhost:3366/configInfo
查出来是12
响应3366: master branch,springcloud-config/config-dev.yml version=12
- 实现一次修改,广播通知,处处生效:只需要刷一下
3344
,剩下的3355
、3366
通过 BUS 自动就刷新了
微服务定点通知
需求场景:只想更改
3355
,不想修改3366
- 使用公式
http://localhost:3344/actuator/bus-refresh/{destination}
/bus-refresh
请求不再发送到具体的微服务实例上,而是发送给config server 3344
,通过destination
参数指定需要更新配置的服务或实例- 例:只想更改
3355
,不想修改3366
- 使用 POST 请求:
curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3355"
/config-client:3355
是由3355
微服务的 YAML 配置文件中的spring.application.name
属性 +server.port
端口号 组成的