乐趣区

关于springcloud:SpringCloud之消息总线Bus

一、概述

1、是什么

Bus 反对两种音讯代理 RabbitMQ 和 Kafka,Bus 配合 Config 应用实现配置的动静刷新。
用来将分布式系统的节点与轻量级音讯零碎链接起来的框架,整合了 Java 的事件处理机制和消息中间件性能

2、能干嘛

Bus 能治理和流传分布式系统间的音讯,就像一个分布式执行器,能够用于播送状态更改,事件推送等,也能够当做微服务间的通信通道。

3、总线是什么及基本原理

是什么:在微服务架构的零碎中,通常会应用 轻量级的音讯代理 来构建一个 共用的音讯主题 ,并让零碎中所有微服务实例都连贯上来,因为 该主题中产生的音讯会被所有实例监听和生产,所以称之为音讯总线
基本原理:ConfigClient 实例都监听 MQ 中同一个 topic(默认就是 Bus)当一个服务刷新数据,就会把这个音讯放入到 topic 中,这样其它监听同一个 topic 的服务就能失去告诉,而后更新本身配置。

二、Bus 动静刷新全局播送

  1. 必须先具备良好的 MQ 环境
  2. 演示播送成果,减少复杂度。增加配置核心客户端 B
  3. 设计思路
    1)利用音讯总线触发一个客户端 /bus/refresh, 而刷新所有客户端的配置。

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

    3)抉择第二种形式,起因:突破了微服务的职责单一性,微服务自身是业务模块,不应该承当配置刷新职责;毁坏了微服务各节点的对等性;有肯定局限性。
  4. 配置核心服务端增加音讯总线反对
1.pom
增加 bus-amqp 的包依赖
2.yml
1)增加 rabbitmq 相干配置
rabbitmq.host= 地址
rabbitmq.port= 端口
rabbitmq.username= 用户名
rabbitmq.password= 明码
2)裸露 bus 刷新配置的端点
management.endpoints.web.exposure.include='bus-refresh'
  1. 配置核心客户端 A 增加音讯总线反对
1.pom
增加 bus-amqp 的包依赖
2.yml
1)增加 rabbitmq 相干配置
rabbitmq.host= 地址
rabbitmq.port= 端口
rabbitmq.username= 用户名
rabbitmq.password= 明码
2)裸露 bus 刷新配置的端点
management.endpoints.web.exposure.include='*'
  1. 配置核心客户端 B 增加音讯总线反对(同客户端 A)
  2. 批改 github 上配置文件,发送 post 申请,发现客户端都曾经刷新,一次批改播送告诉,处处失效。POST 申请:curl -x POST “ 服务器地址 /actuator/bus-refresh”

    三、Bus 动静刷新定点告诉

    不想全副告诉,只想定点告诉。
    指定具体某一个实例失效而不是全副; 公式:http://localhost:3344/actuator/bus-refresh/{destination};/bus/refresh 申请不再发送到具体的服务实例上,而是发给 config server,通过 destination 参数指定须要更新配置的服务或实例(服务名 + 端口号)。

退出移动版