利用服务总线配合rabbitmq来达到自动化刷新配置
1Bus介绍
1.1 简介
- Spring Cloud Bus能管理和传播分布式系统间的消息,就像一个分布式执行器,可用于广播状态更改、时间推送等,也可以当做微服务间的通信通道
1.2 概念
- 总线:在微服务架构的系统中,通常会使用
轻量级的消息代理
来构建一个共用的消息主题
,并让系统中所有微服务实例都连接上来。由于该主题中产生的消息会被所有实例监听和消费,所以称它为消息总线
。在兴县上的各个实例,都可以方便地广播一些需要让其他连接在该主题花式虐狗的实例都知道的消息。
1.3 ConfigClien自动更新基本原理
- ConfigClient实例都监听MQ(message quene)中同一个topic(默认SpringCloudBus)。当一个服务刷新数据的时候,它会把这个信息放入Topic中,这样其他监听同一个Topic的服务就能得到该通知,然后去更新自身的配置
2 RabbitMQ安装下载
由于本次目的是学习SpringCloud为主,所以下载的版本是Windows版本,但真正使用建议在linux上
2.1 下载
- erlang语言:https://www.erlang.org/downloads
- rabbitMQ是使用erlang进行编写,所以需要安装对应的语言解析
2.2 安装
- 先安装erlang语言包,一路默认安装即可
- 记得配置环境变量,电脑 -> 属性 -> 高级 -> 环境变量 -> path -> 编辑 -> 新增安装路径\bin
- 安装rabbitMQ,默认安装即可
- 切换到安装目录\sbin下,输入命令
rabbitmq-plugins enable rabbitmq_management
+若出现以下错误,可使用下方解决方法:
3 配置消息总线Bus
3.1 思路选择
- 消息总线配置有两种思路,第一种是配置给客户端,另一种是配置给服务配置中心
- 因为配置给客户端,打破了客户端的独立性,给器拥有发送消息的能力,此不妥,所以选择配置给服务配置中心
3.2 服务配置中心配置信息总线
- (1)引入新依赖
1
2
3
4
5
6
7
8
9
10<!-- bus & rabbitmq -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<!-- 监控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- (2)修改配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13spring:
rabbitmq:
host: localhost
port: 5672 #默认端口
username: guest #默认用户名
password: guest #默认密码
# 暴露bus舒心配置的端点
management:
endpoints:
web:
exposure:
include: 'bus-refresh'
3.2 客户端篇配置消息总线
- (1)引入依赖
1
2
3
4
5<!-- bus & rabbitmq -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
- (2)修改yaml
1
2
3
4
5
6spring:
rabbitmq:
host: localhost
port: 5672 #默认端口
username: guest #默认用户名
password: guest #默认密码
3.3 测试
- (1)先启动服务端,再启动客户端
- (2)修改仓库中配置文件信息
- (3)向服务端发送刷新指令
- 利用cmd
curl -X POST http://localhost:3344/actuator/bus-refresh
- 利用cmd
- (4)请求客户端接口,返现数据更新了,通过服务端的消息总线,向其余客户端都发送消息,更新配置信息
4 动态刷新定点通知
有时候,不想要全部的客户端都更新,只想要指定的客户端进行更新,所以需要定点通知
- 主要发送刷新信息时添加额外参数即可
http://配置中心/actuator/bus-refresh/目标IP和端口
,IP地址可用服务名称来代替- 例:
http://localhost:3344/actuator/bus-refresh/cloud-config-client:3355