• 微服务之消息总线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%in)。配置完成后启动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即可(微服务名称+端口号)。

        

  • 相关阅读:
    java
    java
    informix资料下载
    linux下vim更改注释颜色
    linux修改目录颜色
    Centos下将sh脚本变为可全局运行的方法
    CentOS7启动时自动加载内核模块
    lsmod,depmod,modprobe,modinfo,insmod,rmmod
    自旋锁与信号量
    软中断、tasklet和工作队列
  • 原文地址:https://www.cnblogs.com/zqhIndex/p/15407505.html
Copyright © 2020-2023  润新知