微服务之消息总线SpringCloudBus

一、什么是消息总线

  在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息中心,并让系统中所有微服务实例都连接上来。由于该中心中产生的消息会被所有实例监听和消费,所以称它为消息总线。

  在总线上的各个实例,都可以方便地广播─些需要让其他连接在该总线的实例都知道的消息,其原理是ConfigClient实例都监听MQ中同一个Topic(默认是springCloudBus)。当一个服务刷新数据的时候,它会把这个信息放入到Topic中,这样其它监听同一Topic的服务就能得到通知。

   Spring Cloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,目前支持RabbitMQ和Kafka。RabbitMQ是一个实现了AMQP(Advanced Message Queuing Protocol)高级消息队列协议的消息队列服务,是一种消息中间件,常被当作服务总线来使用。Kafka是一种高吞吐量的分布式发布订阅消息系统,也是消息中间件的一种。

  Spring Cloud Bus能管理和传播分布式系统间的消息,就像一个分布式执行器,可用于广播状态更改、事件推送等,也可以当作微服务间的通信通道。例如基于RabbitMQ实现配置中心配置信息自动更新的架构模式如下:

 二、RabbitMQ使用

  1、RabbitMQ环境配置:

    a.安装Erlang:因为RabbitMQ服务端代码是使用并发式语言Erlang编写的,所以需要Erlang环境,选择适合自己电脑的版本安装,下载地址http://erlang.org/download/,安装完成后配置系统环境变量(变量名ERLANG_HOME,变量值为安装路径)、配置path变量(新增环境变量%ERLANG_HOME%\bin)。配置完成后启动cmd输入erl如果能看到版本号即为安装成功。

    b.安装RabbbitMQ:下载合适电脑的版本安装,下载地址https://www.rabbitmq.com/download.html,安装完成后安装RabbitMQ-Plugins插件(cmd命令切换到安装目录的sbin路径下,输入rabbitmq-plugins enable rabbitmq_management即可完成安装),最后打开cmd进入sbin目录输入rabbitmqctl status,如果出现一下显示,则表明安装成功。接下来双击rabbitmq-server.bat,访问http://localhost:15672即可进入web可视化管理页面(默认密码账号为guest)。

  2、消息广播的两种设计思想:

    a.利用消息总线触发一个客户端/bus/refresh,而刷新所有客户端的配置(不推荐)。

    b.利用消息总线触发一个服务端ConfigServer的/bus/refresh端点,而刷新所有客户端的配置(推荐)。

  3、微服务模块添加消息总线支持:配置中心和客户端都接入消息总线,选择第二种推荐的设计思想,实现广播通知,步骤如下

    a.服务模块中引入SpringCloudBus工具包

< !--添加消息总线RabbitNQ支持-->
<dependency>
  <groupid>org.springframework.cloud</ groupid>
  <artifactId>spring-cloud-starter-bus-amqp</artifactid>
</dependency>

    b.修改配置yml配置文件,增加如下配置(配置中心需要暴露bus刷新配置的端点,客户端则不需要)

#rabbitmq相关配置
rabbitmq:
   host: localhost   #RabbitMQ服务器地址
   port: 5672         #RabbitMQ服务器端口
   sername: guest  #RabbitMQ服务账号
   password: guest #RabbitMQ服务密码

#rabbitmq相关配置-暴露bus刷新配置的端点
management:
  endpoints:#暴露bus刷新配置的端点
     web;
        exposure:
           include: "bus-refresh'

   完成以上配置之后,启动所有微服务模块,post请求 http://localhost:3344/actuator/bus-refresh 配置中心端点,即可实现消息广播通知其他所有微服务,其他微服务进行配置文件更新。如果只想通知config-client:3355微服务,就不能使用前面那个全局广播方式,只需要post 请求 http://localhost:3344/actuator/bus-refresh/config-client:3355即可(微服务名称+端口号)。

 

    

posted @ 2021-10-14 20:28  我若安好,便是晴天  阅读(686)  评论(0编辑  收藏  举报