【RabbitMQ】核心概念和工作流程

文章目录

  • RabbitMQ 工作流程
    • 流程图
  • Producer 和 Consumer
  • Connecting 和 Channel
  • Virtual host
  • Queue
  • Exchange
  • RabbitMQ 工作流程

RabbitMQ 工作流程

流程图

image.png

RabbitMQ 就是一个生产者/消费者模型

  • Producer 就是生产者、Consumer 就是消费者
  • BrokerRabbitMQ 服务器
  • 生产者和消费者都是 RabbitMQ 服务器的客户端

生产者客户端需要通过 Connection(连接)来和 RabbitMQ 服务器进行通信;RabbitMQ 服务器要通过 Connection(连接)来和消费者客户端进行通信

  • 一个 Connection 有多个 channel
    • channel 就是消息传递的方式

BrockerRabbitMQ 服务器)

  • 一个 Brocker 可以有多个虚拟主机(虚拟机)
  • 多个虚拟机之间是逻辑上的隔离,并不是物理上的隔离
  • 每个虚拟机中,会有多个 Exchange(交换机)和 Queue(队列)
    • 消息是先发送到交换机,然后由交换机进行消息的分发,然后到达队列
      • RabbitMQ 服务器收到消息的时候,会带上一些标签(消息要发到哪里等等)
      • 随后交换机拿到这个消息之后,会根据标签或者一些设置的信息,把这个消息路由到一个或者两个队列
      • 如果没有匹配队列,交换机就会将此消息丢掉,或者返回给生产者

生产者和消费者使用的不是同一个 Connection

image.png

  • 这个图上的 Connection 显示的是客户端的连接
    • 包含生产者和消费者的连接

Producer 和 Consumer

  • Producer:生产者,是 RabbitMQ Server 的客户端,向 RabbitMQ 发送消息
  • Consumer:消费者,也是 RabbitMQ Server 的客户端,从 RabbitMQ 接收消息
  • Brocker:就是 RabbitMQ Server,主要是接收和收发消息

image.png

  • 生产者根据一定的逻辑创建消息,然后把消息发送到 Brocker 里面,发送的这个消息通常是带有一定的业务逻辑结构的

    • 比如生产者是一个订单服务,那发送的就是订单相关信息
      • 订单 id
      • 订单金额
      • 订单数量
      • 支付时间
    • 比如生产者是一个用户注册信息,那发送的就是用户相关信息
      • 用户 id
      • 用户年龄
      • 用户性别
  • 在生产者发送消息的时候,通常还会带上一些标签,

    • Brocker 在收到消息的时候,交换机会根据这些标签进行路由,最终把它放到队列里面
  • 消费的时候,标签就会被丢掉。消费者只会收到消息,并不知道其他信息

    • 消费者并不需要知道其他信息,只需要在收到消息之后,进行相应的逻辑处理即可

Connecting 和 Channel

image.png

  • Connection连接。是客户端和 RabbitMQ 服务器之间的一个 TCP 连接,这个连接是建立消息传递的基础,它负责传输客户端和服务器之间的所有数据和控制信息
  • Channel通道信道Channel 是在 Connection 之上的一个抽象层。在 RabbitMQ 中,一个 TCP 连接可以有多个 Channel,每个 Channel 都是独立的虚拟连接,消息的发送和接收都是基于 Channel

通道的主要作用是将消息的读写操作复用到一个 TCP 连接上,这样可以减少建立和关闭连接的开销,提高性能

Virtual host

  • Virtual host:虚拟主机。这是一个虚拟概念,它为消息队列提供了一种逻辑上的隔离机制,对于 RabbitMQ 而言,一个 BrokerServer 上可以存在多个 Virtual host。当多个不同的用户使用同一个 RabbitMQ Server 提供的服务时,可以虚拟划分出多个 vhost,每个用户在自己的 vhost 创建 exchange/queue

类似于 MySQLdatabase,是一个逻辑上的集合,一个 MySQL 服务器可以有多个 database

Queue

  • Queue队列RabbitMQ 的内部对象,用于存储消息

消息经过一系列的转发

  • 先通过 Channel 到达 Exchange
  • 然后通过 Exchange 到达 Queue
  • 最终存储的地方就是 Queue

image.png
队列和消费者的关系,是多对多的

  • 一个队列,可以由多个消费者来订阅
  • 一个消费者也可以订阅多个队列

Exchange

  • Exchange:交换机。message 到达 Brocker 的第一站,它负责接收生产者发送的消息,并根据特定的规则把这些消息路由到一个或多个 Queue

image.png

  • 消息可能会发给多个队列
  • 可能发给一个队列
  • 也可能没有队列

RabbitMQ 工作流程

image.png

  1. Producer 生产了一条消息
  2. Producer 连接到 RabbitMQ Brocker,建立一个连接(Connection),开启一个信道(Channel
  3. Producer 声明一个交换机(Exchange),路由消息
  4. Producer 声明一个队列(Queue),存放信息
  5. Producer 发送消息至 RabbitMQ Brocker
  6. RabbitMQ Brocker 接收消息,并存入相应的队列(Queue)里面,如果未找到相应的队列,则根据生产者的配置,选择丢弃或者退回给生产者

如果我们把 RabbitMQ 比作一个物流公司,那么它的一些核心概念可以这样理解:

  • Brocker 就类似整个物流公司的总部,它负责协调和管理所有的物流站点,确保包裹安全、高效地送达
  • Virtual Host 可以看做是物流公司为不同客户或业务部门划分的独立运营中心。每个运营中心都有自己的仓库(Queue),分拣规则(Exchange)和运输路线(ConnectionChannel),这样可以确保不同客户的包裹处理不会相互干扰,同时提供定制化的服务
  • Exchange 就像是站点里的分拣中心。当包裹到达时,分拣中心会根据包裹上的标签来决定这个包裹应该送往那个目的地(队列)。快递站点可能有不同类型的分拣中心,有的按照具体地址分拣,有的将包裹复制给多个收件人等
  • Queue 就是快递站点里的一个个仓库,用来临时存放等待派送的包裹。每个仓库都有一个或多个快递员(消费者)负责从仓库中取出包裹并派送给最终的收件人
  • Connection 就像是快递员与快递站点之间的通信线路,快递员需要通过这个线路来接收派送任务(消息)
  • Channel 就像是快递员在执行任务时使用的多个并行的通信线路。这样,快递员可以同时处理多个包裹,比如一遍派送包裹,一边接收新的包裹

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/76736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

龙虎榜——20250414

今天缩量上涨有些乏力,压力位还在~ 2025年4月14日龙虎榜行业方向分析 一、核心主线方向 黄金与贵金属(避险逻辑强化) • 驱动逻辑:国际地缘冲突持续升温(如中东局势、台海动态),叠加美国特朗普…

蔚来汽车智能座舱接入通义大模型,并使用通义灵码全面提效

为加速AI应用在企业市场落地,4月9日,阿里云在北京召开AI势能大会。阿里云智能集团资深副总裁、公共云事业部总裁刘伟光发表主题演讲,大模型的社会价值正在企业市场释放,阿里云将坚定投入,打造全栈领先的技术&#xff0…

探索 Go 与 Python:性能、适用场景与开发效率对比

1 性能对比:执行速度与资源占用 1.1 Go 的性能优势 Go 语言被设计为具有高效的执行速度和低资源占用。它编译后生成的是机器码,能够直接在硬件上运行,避免了 Python 解释执行的开销。 以下是一个用 Go 实现的简单循环计算代码: …

虚幻引擎 Anim To Tex| RVT | RT

本文上篇分为4个部分:动画驱动材质,虚拟纹理,Rendertarget,以及其他杂项的地编ta干货整理。(其中RT部分基本为UOD重要截图摘录) 本文下篇为:skylight和directional light的区别,未完…

kingbase权限管理

1. kingbase模式权限管理 1.1授予用户对模式的权限 以具有足够权限的用户登录后,执行以下 SQL 语句来授予用户对模式的相应权限。假设你要授予用户 your_user 对模式 your_schema 的使用权限: sql -- 授予用户使用模式的权限 GRANT USAGE ON SCHEMA …

9.thinkphp的请求

请求对象 当前的请求对象由think\Request类负责,该类不需要单独实例化调用,通常使用依赖注入即可。在其它场合则可以使用think\facade\Request静态类操作。 项目里面应该使用app\Request对象,该对象继承了系统的think\Request对象&#xff…

Java从入门到“放弃”(精通)之旅——方法的使用⑤

Java从入门到“放弃”(精通)之旅🚀——方法的使用⑤ 📖引言: 在编程领域,代码如同精密的齿轮相互咬合驱动程序运转。随着项目规模渐长,重复的代码片段如同冗余的齿轮,不仅增加负重…

鸿蒙NEXT开发格式化工具类(ArkTs)

import { i18n } from kit.LocalizationKit;/*** 格式化工具类* 提供电话号码格式化、归属地查询、字符转换等功能。* author: 鸿蒙布道师* since: 2025/04/14*/ export class FormatUtil {/*** 判断传入的电话号码格式是否正确。* param phone - 待验证的电话号码* param coun…

[Python基础速成]2-模块与包与OOP

上篇➡️[Python基础速成]1-Python规范与核心语法 目录 Python模块创建模块与导入属性__name__dir()函数标准模块 Python包类类的专有方法 对象继承多态 Python模块 Python 中的模块(Module)是一个包含 Python 定义和语句的文件,文件名就是模…

OSI参考模型和TCP/IP模型

1.OSI参考模型 OSI模型: OSI参考模型有7层,自下而上依次为物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。(记忆口诀:物联网叔会用)。低…

linux Shell编程之循环语句(三)

目录 一. for 循环语句 1. for语句的结构 2. for 语句应用示例 (1) 根据姓名列表批量添加用户 (2) 根据 IP 地址列表检查主机状态 二. 使用 while 循环语句 1. while 语句的结构 2. while 语句应用示例 (1) 批量添加规律编号的用户 (2) 猜价格游戏 三. until 循环语…

最新扣子实战教程,利用扣子平台通过在线表格记录,批量生图,再也不要一条条的粘贴提示词了

1、功能描述 大家好,我是涛涛。今天我要给大家讲解如何在扣子平台上对接飞书电子表格。由于多维表格相对复杂,而很多业务场景其实只需要电子表格就能满足,因此今天我们将演示如何在扣子平台上读取飞书电子表格并批量生成图片。 先看效果&am…

java -jar指定类加载

在 Java 中,使用 java -jar 命令运行 JAR 文件时,默认会加载 JAR 文件的 MANIFEST.MF 文件中指定的 Main-Class。如果你想在运行时指定一个类来加载,可以通过以下方式实现: 方法 1:直接指定类路径和类名 如果你不想使用…

多模态思维链(Multimodal Chain of Thought, MCoT)六大技术支柱在医疗领域的应用

多模态思维链(Multimodal Chain of Thought, MCoT)通过整合文本、图像、视频等多模态数据,结合逻辑推理与深度学习技术,在医疗领域展现出强大的应用潜力。其六大技术支柱在医疗场景中的具体应用如下: 一、推理构建视角:医学诊断的流程优化 MCoT通过多模态推理链生成技术…

从文本到视频:基于扩散模型的AI生成系统全解析(附PyTorch实现)

当语言遇见动态视觉 "用文字生成电影场景"曾是科幻作品中的幻想,如今借助扩散模型(Diffusion Models)正逐步成为现实。本文将手把手带你实现一个创新的文本到视频生成系统,通过深度解析扩散模型原理,结合独…

科普:如何通过ROC曲线,确定二分类的“理论阈值”

在二分类问题中,已知预测概率(如逻辑回归、神经网络输出的概率值)时,阈值的选择直接影响分类结果(正/负样本判定)。 一、实践中的阈值选择方法 1. 基于业务目标的调整 最大化准确率:适用于样…

2025ArkTS基础UI(一)——Column、Row、Text、Button组件

2025ArkTS基础UI(一)——Column、Row、Text、Button组件 前言 臭宝们,今天我们来学习ArkTS基础UI组件的使用,其中包括: Column、Row、Text、Button组件。 知识点 Colum、Row组件用于布局,Text、Image、Button组件用于展示。 …

强化学习:基于价值的方法做的是回归,基于策略的方法做的是分类,可以这么理解吗?

在强化学习领域,基于价值的方法(Value-based Methods)和基于策略的方法(Policy-based Methods)是两种核心范式。本文将从目标函数、优化机制以及与机器学习任务的类比角度,探讨这两种方法是否可以被分别理解为回归和分类任务,并深入分析其内在逻辑。 一、基于价值的方法…

折叠屏手机:技术进步了,柔性OLED面板测试技术需求跟上了吗?

全球智能手机市场陷入创新焦虑,折叠屏手机被寄予厚望,2023 年出货量同比增长 62%。但在供应链技术狂欢背后,存在诸多问题。消费端数据显示,用户使用频率低,定价策略反常。产业链重构虽让部分企业获利,却推高…

前端在线工具 CodePen 和 JSFiddle

前端在线工具 CodePen 和 JSFiddle CodePen 概述:CodePen 是一个社交化的前端开发环境,用户可以在这里创建代码片段(称为“Pens”),分享和展示自己的前端开发作品。 主要功能: 实时预览:用户在…