返回顶部
首页 > 资讯 > 后端开发 > Python >SpringcloudBus消息总线原理是实现详解
  • 342
分享到

SpringcloudBus消息总线原理是实现详解

2024-04-02 19:04:59 342人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录SpringCloud Bus什么是springcloud Bus什么是消息总线Bus实现自动刷新的原理RabbitMQ的下载配置ErlangRabbitMQBus动态刷新全局广

sprinGCloud Bus

什么是springcloud Bus

  上一章的springcloud Bus是对分布式微服务的远程配置,但是有一个遗留的问题就是,Config客户端对远程配置的刷新需要手动使用post请求来完成,这就使得Config客户端动态刷新变得十分麻烦。于是消息总线springcloud Bus就是来解决这个问题的

什么是消息总线

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

Bus实现自动刷新的原理

  所有的Config客户端都监听MQ中同一个topic(默认是SpringCloudBus)。当一个服务刷新数据的时候,它会把这个信息放入到Topic中,这样其他监听同一Topic的服务就能得到通知,然后去更新自身的配置。

  由于springcloud Bus支持两种消息的代理(RabbitMQ和kafka),于是接下来的demo选择使用RabbitMQ 3.7.14,其他的消息中间件Bus暂不支持

RabbitMQ的下载配置

Erlang

  第一步: 下载安装Erlang,地址:传送门,安装除了自定义安装路径外,一路next即可

  第二步: 配置环境变量,新建一个环境变量命名为ERLANG_HOME,值为Erlang的安装路径

path环境中添加 %ERLANG_HOME%\bin

  第三步: win + R 输入cmd回车,键入命令erl测试配置是否成功

RabbitMQ

  第一步: 这里以RabbitMQ 3.7.14为例,地址:传送门,页面的最下方有下载的地方,安装除了自定义安装路径外,一路next即可

  第二步: 配置环境变量,新建一个环境变量命名为RABBITMQ_SERVER,值为RabbitMQ的安装路径

path环境中添加 %RABBITMQ_SERVER%\sbin

  第三步: 安装管理工具RabbitMQ-Plugins,win + R 输入cmd回车,键入命令

rabbitmq-plugins enable rabbitmq_management

  第四步: 第三部安装的管理工具会安装几个RabbitMQ的管理快捷方式,可以点击win键查看,点击即可执行对应操作

  第五步: 测试是否安装成功,浏览器Http://localhost:15672(默认账号:guest,密码:guest),登入RabbitMQ的管理页就表示已经安装成功

Bus动态刷新

  Bus动态刷新有两种设计思想,第一种利用消息总线触发一个客户端的bus/refresh,从而刷新这条总线上的所有客户端配置;第二种利用消息总线触发一个服务端ConfigServer的bus/refresh,从而刷新这个配置中心(服务端)上注册的所有客户端配置。

  以上两种思想并不是都有应用,而是选择了第二种,因为第一种设计思想会使得被选中的服务端节点在配置获取职责之外新增配置刷新的职责,这会打破微服务的职责单一性和各节点之间的对等性。且一旦被选中的节点失效,配置刷新也将会随之失效,这条总线上的服务端依旧无法实时获取到最新的配置。

全局广播通知代码实现

  此时配置相关微服务一共有三个,它们是配置中心服务端3344、客户端3355、客户端3366,全局广播的代码实现需要对三个微服务都进行配置

  配置中心3344: pom文件和配置文件

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

spring:
    #rabbitmq相关配置
    rabbitmq:
      host: localhost
      port: 5672
      username: guest
      passWord: guest
##rabbitmq相关配置,暴露bus刷新配置的端点 SpringCloud Bus动态刷新全局广播
management:
  endpoints: #暴露bus刷新配置的端点
    WEB:
      exposure:
        include: 'bus-refresh'

  客户端3355、3366: pom文件和配置文件

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

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

以3366为例,配置文件的缩进如下

server:
  port: 3366

spring:
  application:
    name: config-client
  cloud:
    config:
      uri: http://localhost:3344  #配置中心的地址
      label: master  #分支名称
      name: config  #配置文件名称
      profile: dev  #读取后缀名称   上述三个综合http://localhost:3344/master/config-dev.yml
  #rabbitmq相关配置
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
#服务注册到eureka地址
eureka:
  client:
    service-url:
      #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://localhost:7001/eureka #单机版

# 暴露监控端点 否则 curl -X POST "http://localhost:3355/actuator/refresh" 不可使用
management:
  endpoints:
    web:
      exposure:
        include: "*"

  ?值得注意的是,之前rabbitmq的web访问端口是15672,但是在代码中连接rabbitmq使用的端口是5672,这里很容易踩坑

  完成前面的配置,使用以下链接访问配置中心服务端3344、客户端3355、客户端3366的配置信息

http://localhost:3344/master/config-dev.yml
http://localhost:3355/configInfo
http://localhost:3366/configInfo

  然后修改gitee上的远程配置,仍然使用上面链接访问,会发现只有配置中心服务端获取的配置是最新的,但是配置客户端的配置还是修改前的,需要使用win+R输入命令刷新,再访问的话配置客户端就是最新的配置了

curl -X POST "http://localhost:3344/actuator/bus-refresh"

定点通知代码实现

  bus除了可以一个命令刷新总线上的所有微服务之外,还可以支持定点刷新,命令如下

定点通知一个

curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3355"

定点通知多个

curl -X POST "http://localhost:3344/actuator/bus-refresh/{config-client:3355,config-client:3366}"

到此这篇关于Springcloud Bus消息总线原理是实现详解的文章就介绍到这了,更多相关Springcloud Bus内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringcloudBus消息总线原理是实现详解

本文链接: https://lsjlt.com/news/167515.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringcloudBus消息总线原理是实现详解
    目录springcloud Bus什么是springcloud Bus什么是消息总线Bus实现自动刷新的原理RabbitMQ的下载配置ErlangRabbitMQBus动态刷新全局广...
    99+
    2024-04-02
  • 基于kafka实现SpringCloudBus消息总线
    目录一、什么是消息总线二、整合消息总线实现配置自动刷新2.1 面向客户端基本架构2.2 面向服务端的架构三、利用kafka实现消息总线3.1 Spring Boot 整合kafka3...
    99+
    2024-04-02
  • Android实现消息总线的几种方式详解
    目录前言一、BroadcastReceiver 广播二、EventBus三、RxBus四、LiveDataBus五、FlowBus总结前言 消息总线又叫事件总线,为什么我们需要一个消...
    99+
    2024-04-02
  • Android如何实现消息总线
    这篇文章主要介绍“Android如何实现消息总线”,在日常操作中,相信很多人在Android如何实现消息总线问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android如何实现消息总线”的疑惑有所帮助!接下来...
    99+
    2023-07-02
  • php实现消息推送的原理是什么
    这篇文章主要讲解了“php实现消息推送的原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php实现消息推送的原理是什么”吧!一、PHP实现消息推送的基础在介绍PHP实现消息推送的原理...
    99+
    2023-07-06
  • 基于kafka怎么实现Spring Cloud Bus消息总线
    这篇文章主要介绍“基于kafka怎么实现Spring Cloud Bus消息总线”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于kafka怎么实现Spring Clo...
    99+
    2023-06-30
  • RocketMQ事务消息原理与使用详解
    目录一、RocketMQ事务消息概要二、RocketMQ事务消息使用案例(1)、定义消息监听器(2)、定义消息生产者(3)、定义消息消费者(4)、观察生产者控制台输出(5)、观察消费...
    99+
    2023-02-13
    RocketMQ事务消息 RocketMQ事务消息原理 RocketMQ事务消息使用
  • Java线程池实现原理总结
    目录一、线程池参数二、线程池执行流程三、四种现成的线程池要理解实现原理,必须把线程池的几个参数彻底搞懂,不要死记硬背 一、线程池参数 1、corePoolSize(必填):核心线程数...
    99+
    2024-04-02
  • Vue组件之事件总线和消息发布订阅详解
    目录简介事件总线消息的发布订阅总结简介 主要介绍事件总线的定义和编写方法和Vue是如何实现消息的订阅与发布的。 事件总线 事件总线是组件间通信的一种方式,适用于任意组件间的通信,比如...
    99+
    2024-04-02
  • 详解redis是如何实现队列消息的ack
    前言 由于公司提供的队列实在太过于蛋疼而且还限制不能使用其他队列,但为了保证数据安全性需要一个可以有ack功能的队列。 原生的redis中通过L/R PUSH/POP方式来实现队列的功能,这个当然是没办法满...
    99+
    2022-06-04
    队列 如何实现 详解
  • 线程池的原理与实现详解
    一. 线程池的简介通常我们使用多线程的方式是,需要时创建一个新的线程,在这个线程里执行特定的任务,然后在任务完成后退出。这在一般的应用里已经能够满足我们应用的需求,毕竟我们并不是什么...
    99+
    2022-11-15
    线程池 原理
  • Java线程的停止实现原理详解
    目录线程停止的原理如何正确停止线程在普通情况下停止线程在阻塞情况下停止线程线程在每次迭代后都阻塞停止线程的最佳实践错误停止的方法被弃用的stop,suspend和resume方法用v...
    99+
    2023-01-28
    Java线程的停止 Java线程原理
  • java开发RocketMQ消息中间件原理基础详解
    RocketMQ 是什么 Github 上关于 RocketMQ 的介绍: RcoketMQ 是一款低延迟、高可靠、可伸缩、易于使用的消息中间件。具有以下特性: 支持发布/...
    99+
    2024-04-02
  • 详解Redis用链表实现消息队列
    前言 Redis链表经常会被用于消息队列的服务,以完成多程序之间的消息交换。个人认为redis消息队列有一个好处,就是可以实现分布式和共享,就和memcache作为mysql的缓存和mysql自带的缓存一样...
    99+
    2022-06-04
    队列 详解 链表
  • SpringBoot+RabbitMQ实现消息可靠传输详解
    目录环境配置消息丢失分析生产阶段生产端模拟消息丢失RabbitMQ消费端环境配置 SpringBoot 整合 RabbitMQ 实现消息的发送。 1.添...
    99+
    2024-04-02
  • Springboot详解RocketMQ实现广播消息流程
    RocketMQ消息模式主要有两种:广播模式、集群模式(负载均衡模式) 广播模式是每个消费者,都会消费消息; 负载均衡模式是每一个消费只会被某一个消费者消费一次; 我们业务上一般用的...
    99+
    2024-04-02
  • Redis实现消息的发布订阅原理分析
    目录一、什么是发布和订阅二、Redis的发布和订阅三、redis 发布订阅常用命令四、命令实战1、基本使用2、订阅符合要求的频道3、查看活跃频道五、发布订阅原理1、订阅频道原理2、发布信息原理3、退订信息原理一、什么是发...
    99+
    2022-07-25
    Redis消息发布 Redis消息订阅
  • C++ 线段树原理与实现示例详解
    目录一、问题引入二、线段树的构建三、线段树的单点修改与查询1、修改2、查询四、线段树的区间修改与查询1、修改2、查询一、问题引入 对于一般的区间问题,比如RMQ(区间的最值)、区间的...
    99+
    2024-04-02
  • Java多态实现原理详细梳理总结
    目录一、概述引入定义二、多态的体现三、多态的好处四、引用类型转换向上转型向下转型为什么要转型转型的异常一、概述 引入 多态是继封装、继承之后,面向对象的第三大特性。生活中,比如跑的动...
    99+
    2024-04-02
  • Python中线程的MQ消息队列实现以及消息队列的优点解析
    “消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成...
    99+
    2022-06-04
    队列 消息 线程
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作