SpringCloud - Bus服务总线

SpringCloud - Bus服务总线

0. 概述

① SpringCloud Bus结合SpringCloud Config可以实现配置的动态刷新
在这里插入图片描述

② Bus的两种广播方式:

一是Bus直接通知给其中一个客户端,由这个客户端开始蔓延,传播给其他所有客户端

二是通知给配置中心的服务端,有服务端广播给所有客户端

③ 什么是总线:

在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息主题,并让系统中所有微服务实例都连接上来,由于该主题中产生的消息会被所有实例监听和消费,所以称为消息总线。在总线上的各个实例,都可以方便地广播一些需要让其他连接在该主题上的实例都知道的消息。

④ 基本原理:

ConfigClient实例都监听MQ中同一个topic(默认是SpringCloud Bus)。当一个服务刷新数据的时候,它会把这个消息放入topic中,这样其他监听同一topic的服务就能得到通知,然后去更新自身的配置。

通过消息队列达到广播的效果,我们要广播每个消息时,主要放到某个topic中,所有监听的节点都可获取到

1. Bus实例

1.1 配置RabbitMQ环境

① 下载安装erlang:http://erlang.org/download/otp_win64_21.3.exe

② 下载安装RabbitMQ:http://www.rabbitmq.com/download.html

③ 进入RabbitMQ的安装目录:执行 rabbitmq-plugins enable rabbitmq_management启动管理功能

在这里插入图片描述

④ 在菜单栏找到RabbitMQ start启动RabbitMQ,然后访问RabbitMQ主页:

在这里插入图片描述

⑤ 再添加一个配置中心客户端3366,直接复制3355的即可

1.2 使用Bus实现全局广播

Bus广播有两种方式,我们采用第二种方式:

1、利用消息总线触发一个客户端/bus/refresh,而刷新所有客户端的配置

2、利用消息总线触发一个服务端ConfigServer的/bus/refresh端点,而刷新所有客户端的配置

① 3344(服务端中心配置)的pom文件中添加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>

② 3344的yml文件中添加对RabbitMQ的配置:

# rabbitmq的相关配置
rabbitmq:
  host: localhost
  port: 5672
  username: guest
  password: guest

# 暴露监控端口
management:
  endpoints:
    web:
      exposure:
        include: "bus-refresh"

③ 3355(客户端)的pom文件中添加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>

④ 3355的yml文件中添加对RabbitMQ的配置:

# rabbitmq的相关配置
rabbitmq:
  host: localhost
  port: 5672
  username: guest
  password: guest

同样对3366做和3355一样的配置

⑤ 测试:启动7001、3344、3355、3366模块

修改GitHub上的配置文件version=10,然后使用postman工具发送post请求:http://localhost:3344/actuator/bus-refresh,此时只需要刷新3344即可让3355、3366动态获取最新的配置文件:

在这里插入图片描述

所有客户端都监听了一个rabbitMq的topic,我们将信息放入这个topic,所有客户端都可以送到,从而实时更新

1.3 使用bus实现定点通知

就是只通知部分服务,比如只通知3355,不通知3366

http://localhost:3344/actuator/bus-refresh/{destination}:/bus/refresh请求不再发送到具体的服务实例上,而是发给config server并通过destination参数指向需要配置的服务或实例

①启动3344、3355、3366模块

② 将github的version改为12

③ 只向3355发送通知:使用postman发送post请求:http://localhost:3344/actuator/bus-refresh/config-client:3355

config-client:3355即为:微服务的名称+端口号

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我一直在流浪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值