
本文共 4446 字,大约阅读时间需要 14 分钟。
一、什么是Spring Cloud Bus?
- Spring Cloud Bus 使用轻量级的消息代理来连接微服务架构中的各个服务,可以将其用于广播状态更改(例如配置中心配置更改)或其他管理指令。
- 我们通常会使用消息代理来构建一个主题,然后把微服务架构中的所有服务都连接到这个主题上去,当我们向该主题发送消息时,所有订阅该主题的服务都会收到消息并进行消费。使用 Spring Cloud Bus 可以方便地构建起这套机制,所以 Spring Cloud Bus 又被称为消息总线。
- Spring Cloud Bus 配合 Spring Cloud Config 使用可以实现配置的动态刷新。
- Spring Cloud Bus 支持两种消息代理:RabbitMQ 和 Kafka
3.实现配置的动态刷新
基于 Spring Cloud Bus 和 Spring Cloud Config 和 RabbitMQ
-
搭建RabbitMQ环境
Windows系统
-
安装Erlang
http://erlang.org/download/otp_win64_21.3.exe
-
安装RabbitMQ
https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.14/rabbitmq-server-3.7.14.exe
-
进入sbin目录
-
启动管理插件
rabbitmq-plugins enable rabbitmq_management
-
访问:http://localhost:15672/
-
输入账号密码并登录:guest guest
Linus系统
-
安装所需环境
yum install openssl-develyum install erlangyum install socat
-
添加RabbitMQ仓库
vi /etc/yum.repos.d/rabbitmq-server.repo[rabbitmq-server]name=rabbitmq-serverbaseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/$basearchrepo_gpgcheck=1gpgcheck=0enabled=1gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkeysslverify=1sslcacert=/etc/pki/tls/certs/ca-bundle.crtmetadata_expire=300
-
安装RabbitMQ
dnf makecache -y --disablerepo='*' --enablerepo='rabbitmq-server'dnf install -y rabbitmq-serverrpm -qi rabbitmq-server
-
启动相关服务
service rabbitmq-server startrabbitmq-plugins enable rabbitmq_management
-
访问:http://localhost:15672/
-
输入账号密码并登录:guest guest
-
-
项目环境版本对照参考
-
服务端项目搭建
-
添加依赖
org.springframework.boot spring-boot-starter-actuator org.springframework.cloud spring-cloud-starter-bus-amqp org.springframework.cloud spring-cloud-starter-consul-discovery -
添加配置
server: port: 9000spring: application: name: config-server # consul相关配置 cloud: consul: host: localhost port: 8500 discovery: service-name: ${spring.application.name} config: server: git: uri: https://gitee.com/prochick/spring-cloud-config.git username: xxx password: xxx clone-on-start: true default-label: dev basedir: E:/conf # rabbitmq相关配置 rabbitmq: host: localhost port: 5672 username: guest password: guest #暴露springcloud bus的刷新配置端点 management: endpoints: web: exposure: include: 'bus-refresh'
-
-
客户端项目搭建
-
添加依赖
org.springframework.boot spring-boot-starter-actuator org.springframework.cloud spring-cloud-starter-bus-amqp org.springframework.cloud spring-cloud-starter-consul-discovery -
添加配置(bootstrap.yml)
server: port: 9001spring: application: name: config-client # consul相关配置 cloud: consul: host: localhost port: 8500 discovery: service-name: ${spring.application.name} config: uri: http://localhost:9000 label: master name: client profile: dev fail-fast: true # rabbitmq相关配置 rabbitmq: host: localhost port: 5672 username: guest password: guest # 暴露springcloud config的刷新配置端点 management: endpoints: web: exposure: include: 'refresh'
-
添加控制器
@RestController@RefreshScopepublic class ConfigController { @Value("${name}") private String name; @GetMapping("/configInfo") public String getConfigInfo() { return name; }}
-
添加远程配置文件
# 文件内容name: zhangsan
-
-
测试
├── consul-server – consul注册中心
├── config-server – 配置中心服务
├── config-client1 – 配置客户端服务1
├── config-client2 – 配置客户端服务2
-
启动所有服务后,我们登录RabbitMQ的控制台可以发现Spring Cloud Bus 创建了一个叫springCloudBus的交换机及三个以 springCloudBus.anonymous开头的队列:
-
分别调用http://localhost:9001/configInfo 和 http://localhost:9002/configInfo 获取配置信息
返回结果:zhangsan
-
我们修改Git仓库中master分支下的client-dev.yml配置文件:
# 文件内容name: lisi
-
刷新 config server
# 全部刷新curl -X POST http://localhost:9000/actuator/bus-refresh# 指定服务集群刷新curl -X POST http://localhost:9000/actuator/bus-refresh/user-service# 指定服务节点刷新curl -X POST http://localhost:9000/actuator/bus-refresh/user-service:8081
-
分别调用http://localhost:9001/configInfo 和 http://localhost:9002/configInfo 获取配置信息
返回结果:lisi
-
3.结合WebHooks实现自动刷新
WebHooks相当于是一个钩子函数,我们可以配置当向Git仓库push代码时触发这个钩子函数,当我们向配置仓库push代码时就会自动刷新服务配置了。
-
使用GitEE
-
使用GitHub
【源码地址】:
发表评论
最新留言
关于作者
