SpringCloud Bus 消息总线概述和案例详解

在上一篇文章https://blog.csdn.net/weixin_62661659/article/details/124421327?spm=1001.2014.3001.5501已经记录了SpringCloud Config的配置详解,但是存在了一个问题,假如有多个微服务3344/3355/3366,每个微服务都需要一遍手动post刷新,太麻烦,所以这篇来学习一下,一次广播通知,处处生效。

一、概述

1.是什么?
在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息主题,并让系统中所有微服务实例都连接上来。由于该主题中产生的消息会被所有实例监听和消费,所以称它为消息总线。在总线上的各个实例,都可以方便地广播一些需要让其他连接在该主题上的实例都知道的消息。
Spring Cloud Bus 配合 Spring Cloud Config 使用可以实现配置的动态刷新。
SpringCloud Bus 消息总线概述和案例详解_第1张图片
Spring Cloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了Java的事件处理机制和消息中间件的功能。
Spring Clud Bus目前支持RabbitMQ和Kafka。
2.作用
Spring Cloud Bus能管理和传播分布式系统间的消息,就像一个分布式执行器,可用于广播状态更改、事件推送等,也可以当作微服务间的通信通道。
SpringCloud Bus 消息总线概述和案例详解_第2张图片
3.基本原理
ConfigClient实例都监听MQ中同一个topic(默认是springCloudBus)。当一个服务刷新数据的时候,它会把这个信息放入到Topic中,这样其它监听同一Topic的服务就能得到通知,然后去更新自身的配置

二、RabbitMQ环境配置

Erlang和Rabbit是有对应版本的
1.安装Erlang
下载地址:http://erlang.org/download/otp_win64_21.3.exe
安装步骤:直接一直下一步(可以修改自己的安装位置)

2.安装rabbitmq
下载地址:https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.7.14
安装步骤:直接一直下一步(可以修改自己的安装位置)

3.进入到rabbitmq/sbin 目录下打开dos窗口
4.添加可视化插件:rabbitmq-plugins enable rabbitmq_management
SpringCloud Bus 消息总线概述和案例详解_第3张图片
SpringCloud Bus 消息总线概述和案例详解_第4张图片
5.启动rabbitmq
访问地址: localhost:15672
默认账户:guest 默认密码:guest
SpringCloud Bus 消息总线概述和案例详解_第5张图片
6.增加复杂度,再以3355为模板再制作一个3366(3344、3355的创建请看顶部链接)
为了区分访问时的内容,在3366controller里的代码:

@RestController
@RefreshScope
public class ConfigClientController {
    @Value("${server.port}")
    private String serverPort;

    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/configInfo")
    public String getConfigInfo() {
        return configInfo + "我是" + serverPort + "端口";
    }
}

利用消息总线触发一个服务端ConfigServer的/bus/refresh端点,而刷新所有客户端的配置
SpringCloud Bus 消息总线概述和案例详解_第6张图片
7.修改配置文件,添加消息总线支持
cloud-config-center-3344
cloud-config-client-3355
cloud-config-client-3366 新加的东西是一样的

<!--添加消息总线RabbitMQ支持-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
#rabbitmq相关配置
rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

SpringCloud Bus 消息总线概述和案例详解_第7张图片
8.测试
启动Eureka7001、3344、3355、 3366
修改gitee仓库的内容
发送Post请求:curl -X POST “http://localhost:3344/actuator/bus-refresh”
一次发送,处处生效
访问:http://localhost:3355/configInfo
http://localhost:3366/configInfo

四、定点通知

只通知3355,不通知3366
curl -X POST “http://localhost:3344/actuator/bus-refresh/config-client:3355”

你可能感兴趣的:(微服务,spring,cloud,rabbitmq,java)