当前位置: 首页 > news >正文

【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 就像是快递员在执行任务时使用的多个并行的通信线路。这样,快递员可以同时处理多个包裹,比如一遍派送包裹,一边接收新的包裹

相关文章:

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

文章目录 RabbitMQ 工作流程流程图 Producer 和 ConsumerConnecting 和 ChannelVirtual hostQueueExchangeRabbitMQ 工作流程 RabbitMQ 工作流程 流程图 RabbitMQ 就是一个生产者/消费者模型 Producer 就是生产者、Consumer 就是消费者Broker 是 RabbitMQ 服务器生产者和消费…...

Windows 操作系统 - Windows 10 磁盘管理无法为 C 盘选择扩展卷

Windows 10 磁盘管理无法为 C 盘选择扩展卷 在 Windows 10 的磁盘管理中,无法为 C 盘选择扩展卷(选项灰色不可用),主要原因是未分配空间没有紧邻 C 盘的右侧 补充:Windows 10 磁盘管理打开方式 1. 按下快捷键【Win …...

数据结构——双向链表

首先我们要介绍一下链表的分类 链表的分类 链表说明: 虽然有这么多种链表结构,但是我们实际中用的还是两种结构:单链表(单向不带头不循环)和 双向带头循环链表 。 单链表(单向不带头不循环)&…...

Git报错remote: Verify fatal: Authentication failed for ***

解决 Git 拉取代码时报错:fatal: Authentication failed 在使用 Git 时,执行如下命令: git pull origin master出现报错: remote: Verify fatal: Authentication failed for ***一、问题原因分析 1. 使用 HTTP 协议访问&#…...

八、自动化函数

1.元素的定位 web自动化测试的操作核心是能够找到页面对应的元素,然后才能对元素进行具体的操作。 常见的元素定位方式非常多,如id,classname,tagname,xpath,cssSelector 常用的主要由cssSelector和xpath 1.1 cssSelector选择器 选择器的功能&#x…...

websoket 学习笔记

目录 基本概念 工作原理 优势 应用场景 HTTP协议与 webSoket协议之间的对比 消息推送场景 1. 轮询(Polling) 2. 长轮询(Long Polling) 3. 服务器发送事件(Server-Sent Events, SSE) 4. WebSocket…...

正版金币捕鱼海洋管家APP源码结构解析与运行环境说明

这是一款基于成熟运营逻辑开发的休闲类互动娱乐游戏《海洋管家》,采用金币流通体系,双端源码完整,结构清晰,适合用于结构学习、本地部署测试或功能参考。 整体玩法围绕捕鱼为主线,并融合了排行榜、VIP、签到、道具商城…...

大语言模型深度思考与交互增强

总则:深度智能交互的全面升级 在主流大语言模型(LLM)与用户的每一次交互中,模型需于回应或调用工具前,展开深度、自然且无过滤的思考进程。当模型判断思考有助于提升回复质量时,必须即时进行全方位的思考与…...

Vue.js 项目中 vue.config.js 常用配置项解析

Vue.js 项目中 vue.config.js 常用配置项解析 摘要 在 Vue CLI 创建的项目中,vue.config.js 是核心配置文件,用于定制化构建、开发和部署流程。本文详细解析了该文件的常用配置项,包括基础路径、开发服务器、Webpack 配置、CSS 预处理、插件…...

Javascript逗号操作符

这段代码是一个使用了生成器函数(Generator Function)的无限循环(for (;;)),内部通过switch语句控制流程。代码中有很多逗号分隔的语句,这其实是利用了JavaScript的逗号操作符(comma operator&a…...

windows系统安装驱动、cuda和cudnn

一、首先在自己的电脑里安装了nvidia的独立显卡 显卡的查找方式: CtrlShiftEsc打开任务管理器,点击性能,点击GPU 0查看显卡型号,如下图所示: 只要电脑中有nvidia的独立显卡,就可以暗转显卡驱动、cuda和cu…...

常见的 14 个 HTTP 状态码详解

文章目录 一、2xx 成功1、200 OK2、204 No Content3、206 Partial Content 二、3xx 重定向1、301 Moved Permanently2、302 Found3、303 See Other注意4、Not Modified5、307 Temporary Redirect 三、4xx 客户端错误1、400 Bad Request2、401 Unauthorized3、403 Forbidden4、4…...

DAY 44 leetcode 28--字符串.实现strStr()

题号28 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 我的解法 双指针,slow定位&…...

Nginx用途以及好处:

反向代理: 1、提高访问速度 2、进行负载均衡:所谓负载均衡,就是把大量的请求按照我们指定的的方式均衡的分配给集群中的每台服务器(不使用nginx前端会固定的访问某一台服务器 加入nginx分配到多台服务器) 3、保证后端的安全 服务器一般部署在…...

打造可控可测的星座网络:IPLOOK低轨通信仿真平台搭建实践

在低轨卫星通信迅猛发展的趋势下,空天地一体化网络正逐步成为新一代信息基础设施的核心组成。作为移动核心网领域的技术引领者,IPLOOK依托在5G核心网、NTN(非地面网络)和卫星通信仿真方面的技术优势,率先构建了自主可控…...

火车头采集动态加载Ajax数据(无分页瀑布流网站)

为了先填充好数据在上线,在本地搭建了一个网站,并用火车头采集数据填充到里面。 开始很上手,因为找的网站的分类中是有分页的。很快捷的找到页面标识。 但是问题来了,如今很多网站都是采用的Ajax加载数据,根本没有分…...

笔记:代码随想录算法训练营day67:Floyd 算法精讲、A * 算法精讲 (A star算法) 严重超时完结,不过,撒花

学习资料:代码随想录 Floyd 算法精讲 卡码网:97. 小明逛公园 首先明确floyd算法解决的是多源最短路径问题,对边的权的正负值没有要求,而且是动态规划的思想 五部曲: 定义:grid[i][j][k]表示从i出发到j…...

Electron Forge【实战】桌面应用 —— AI聊天(中)

系列教程 Electron Forge【实战】桌面应用 —— AI聊天(上) 添加本地存储 Dexie.js 用 IndexedDB 实现,Dexie.js 库简化操作 npm i dexie新建文件 src\db.ts import Dexie, { type EntityTable } from "dexie";import { Provide…...

国达陶瓷重磅推出陶瓷罗马柱外墙整装尖端新产品“冠岩臻石”

近日,记者在佛山国达建材有限公司(以下简称国达陶瓷)董事长杨建平处了解到,该公司重磅推出的“冠岩臻石”新产品,是属于陶瓷罗马柱外墙整装产品中的尖端产品。新产品自面市之后,深受高端用户的青睐与认可。…...

Java 系统设计:如何应对高并发场景?

Java 系统设计:如何应对高并发场景? 在现代互联网应用中,高并发场景已经成为系统设计中不可避免的挑战。无论是电商秒杀、抢票系统,还是实时数据处理平台,高并发场景都对系统的性能、稳定性和扩展性提出了极高的要求。…...

VR 全景多维赋能,众趣科技助力零售业开启购物新时代

说到商铺这个词,最早形成于春秋战国时期,当时还未形成固定位置的商铺,部分有远见的商人会在人流量较大的区域摆设摊位,促进了城市的繁荣‌。‌到了唐宋时期,商铺进一步发展‌,并随着商品经济的发展和城市人…...

五大生产模式(MTS、MTO、ATO、ETO、CTO)的差异

五大生产模式(MTS、MTO、ATO、ETO、CTO)差异 一、 库存控制二、 订货提前期三、交期与库存分析四、五大生产模式的产品生命周期 一、 库存控制 ETO 模式侧重于原材料库存管理,以应对定制设计所需的物料供应。 MTO 模式重点是原材料库存&…...

clickhosue中json字符串转为表

将json字符串直接通过sql转为表,这里就可以直接把接口来的数据,直接通过clickhouse进行关联查询了。 -- 将json字符串直接通过sql转为表,这里就可以直接把接口来的数据,直接通过clickhouse进行关联查询了。 WITH -- 解析 JSON 数据为字符串json_data AS (SELECT [{"c…...

二叉树的基本功能实现

一.二叉树的结构及实现 1.二叉树的结构 在之前的章节中已经介绍过,二叉树是一种特殊的树,其最大度为2,及最多有左,右两个孩子,结构图如下 在此之前已经讨论过一些特殊的二叉树,这里讨论一般的二叉树 2.…...

VSCode 降低适用版本并且关闭自动更新

VSCode 降低适用版本并且关闭自动更新 相关链接问题描述解决方法下载安装包关闭自动更新 参考链接 相关链接 VSCode 官网 问题描述 无法正常使用vscode-remote插件远程连接Centos7等一些老版本Linux云服务器(如Centos7) 从2024年1月,vsco…...

OpenHarmony - 小型系统内核(LiteOS-A)(二)

OpenHarmony - 小型系统内核(LiteOS-A)(二) 三、基础内核 3.1、中断及异常处理 基本概念 中断是指出现需要时,CPU暂停执行当前程序,转而执行新程序的过程。即在程序运行过程中,出现了一个必须…...

2025第十六届蓝桥杯PythonA组部分题解

试题A:数字求和 题目描述 给定两个整数a和b,输出它们的和。 输入格式:两个整数,空格分隔 输出格式:一个整数 输入输出样例 输入: 5 8输出: 13解题思路 直接使用加法运算符计算两数之和。…...

苍穹外卖day04

Spring Task实现定时处理订单状态 作用:不需要输入提示信号,便可定时自动执行程序 使用步骤 1、启动类上加上注解(EnableScheduling)开启定时任务调度 2、专门创建一个包来管理执行定时任务的类,该类需要交给IOC容…...

曲线与曲面的绘制

一、学习目标 (1)掌握常用规则参数曲线与曲面的编程绘制方法。 (2)掌握自由曲线与曲面的编程绘制方法。 (3)了解自由曲面的拼接编程方法。 二、学习内容 (1)编程绘一个规则参数…...

Python Cookbook-6.2 定义常量

任务 你需要定义一些模块级别的变量(比如命名的常量),而且客户代码无法将其重新绑定。 解决方案 你可以把任何对象当做模块一样安装。将下列代码存为一个模块const.py,并放入你的Python的sys.path 指定的目录中: class _const(object):class ConstEr…...

【信息系统项目管理师】高分论文:论信息系统项目的范围管理(信息化系统综合管理平台)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划范围管理2、收集需求3、定义范围4、创建WBS5、确认范围6、控制范围论文 2017年6月,我作为项目经理参与了 XX市经济和信息化委员会系统综合管理平台建设项目,该项目投资共150万元人民币,建设工期…...

用Webpack 基础配置快速搭建项目开发环境

Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具,但是Webpack有大量的配置项,对新手不太友好,但是我们可以根据webpack-cli的init命令根据项目需求快速生成webpack的配置文件,本文将手把手教你如何用 Webpack 和 npm 快…...

【LLM Agent】SystemMessage 和 HumanMessage

文章目录 SystemMessage 和 HumanMessageSystemMessage(系统消息)HumanMessage(用户消息)结合使用高级设置能否将用户消息(HumanMessage)写在系统消息(SystemMessage) SystemMessage…...

机器学习核心知识:从基础概念到关键算法

摘要 本文深度剖析机器学习知识体系,从基本概念、学习方式,到分类算法、逻辑回归等关键内容均有涉及。详细阐述各知识点原理与应用场景,并对比多种算法的优劣。 关键词:机器学习;监督学习;分类算法&#x…...

信奥赛之c++基础(for与if的嵌套使用)

🍭 糖果工厂大闯关——for与if的嵌套魔法 🚚 第一章:快递站的故事(情景引入) 📦 快递分拣员小明 快递站每天要处理100个包裹,小明发现: 有些包裹要立即派送(红色标签)有些包裹可以暂存仓库(蓝色标签)for (int 包裹号=1; 包裹号<=100; 包裹号++) {if (包裹颜…...

凡泰极客亮相QCon2025鸿蒙专场,解析FinClip“技术+生态”双引擎

2025年4月10日&#xff0c;备受瞩目的QCon开发者技术峰会盛大举行&#xff0c;本次活动开设鸿蒙专场以“HarmonyOS NEXT 创新特性与行业实践”为主题&#xff0c;汇聚了众多鸿蒙生态的领军人物与技术专家&#xff0c;共同探讨鸿蒙操作系统的技术创新与行业应用。 凡泰极客CTO徐…...

day25 学习笔记

文章目录 前言一、图像翻转二、图像的仿射变换1.仿射变换的原理2.仿射变换函数3.图像旋转4.图像平移5.图像缩放6.图像剪切 三、插值方法1.最近领插值2.双线性插值法3.双三次插值4.代码展示 前言 通过今天的学习&#xff0c;我掌握了OpenCV中有关图像翻转&#xff0c;图像仿射变…...

Docker构建go-web应用

https://www.liwenzhou.com/posts/Go/deploy-in-docker/#c-0-4-0 本文介绍了如何使用Docker以及Docker Compose部署我们的 Go Web 程序。 Docker部署示例 准备代码 这里我先用一段使用net/http库编写的简单代码为例讲解如何使用Docker进行部署&#xff0c;后面再讲解稍微复杂…...

人工智能100问☞第4问:人工智能与机器学习、深度学习的区别?

目录 一、通俗解释 二、专业解析 三、权威参考 人工智能(AI)是目标​​:让机器具备智能(如建造一辆车);机器学习(ML)是引擎​​:提供动力方法(如燃油发动机);深度学习(DL)是涡轮增压​​:提升引擎性能(如处理复杂路况)。三者协同驱动技术发展,如同车辆需要…...

电子电器架构 --- 智能座舱的定义

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…...

JavaScript Map 对象深度解剖

JavaScript Map 对象深度解剖 一、Map 核心特性 1.1 什么是 Map&#xff1f; 通俗解释&#xff1a; Map 就像是一个“超级版对象”&#xff0c;它用更灵活的方式存储键值对。举个生活例子&#xff1a; 普通对象&#xff08;Object&#xff09;像一本传统电话簿&#xff0c;…...

zlm启用webrtc交叉编译指南

zlm启用webrtc交叉编译指南 一、交叉编译openssl 下载openssl-1.1.1k版本&#xff0c;其他版本可能会有问题 $ wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz $ tar -xvzf openssl-1.1.1k.tar.gz $ cd openssl-1.1.1k $ ./config no-asm shared --openssld…...

树莓派超全系列教程文档--(23)内核参数

内核参数 内核命令行 (cmdline.txt)命令行选项标准条目设置KMS显示模式 其他条目 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 内核命令行 (cmdline.txt) Linux 内核在启动过程中接受一系列命令行参数。在 Raspberry Pi 上&#xff0c;该命令…...

机器学习 从入门到精通 day_05

1. 线性回归 前面介绍了很多分类算法&#xff0c;分类的目标变量是标称型数据&#xff0c;回归是对连续型的数据做出预测。 标称型数据&#xff08;Nominal Data&#xff09;是统计学和数据分析中的一种数据类型&#xff0c;它用于分类或标记不同的类别或组别,数据点之间并没有…...

读者、写者问题优化

#include <stdio.h> #include <time.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h> #include <semaphore.h> #define NUM_READERS 5 #define NUM_WRITERS 5 // 定义信号量和全局变量 sem_t sdata, srcount; int rea…...

DeepSeek-V3与DeepSeek-R1架构原理及应用对比分析

DeepSeek-V3与DeepSeek-R1架构原理及应用对比分析 DeepSeek作为中国人工智能领域的重要参与者&#xff0c;推出了V3和R1两款大模型&#xff0c;它们在架构设计和应用场景上各有侧重。本文将深入分析这两款模型在架构原理上的核心差异&#xff0c;并探讨它们如何分别应对复杂推…...

OpenCV图像增强实战教程:从理论到代码实现

OpenCV图像增强实战教程&#xff1a;从理论到代码实现 &#x1f525;&#x1f680; &#x1f4da; 想要掌握图像增强的核心技术&#xff1f;本文手把手教你使用OpenCV实现多种图像增强技术&#xff0c;从基础的线性变换到高级的频域滤波&#xff0c;全方位提升你的图像处理能力…...

一文介绍关于多模态的基础知识 !!

文章目录 前言 一、机器学习 二、深度学习 三、应用领域 前言 多模态不再局限于单一类型的数据处理&#xff0c;它融合图像、文本和音频等多种信息源。其基础知识涵盖机器学习、深度学习及其在多模态领域的应用。机器学习部分包含分类、回归、聚类和降维等四类算法&#xff1b…...

mysql DQL

一.基本查询 1.查询多个字段 2.查看所有字段 3.设置别名 4.去除重复记录 二.条件查询 1.大于小于等于 2.查询 身份证为空的 没有所以没有记录 3.在15到20这个区间范围内 4.or/in 或者 4.like 匹配 &#xff08;_匹配单个字符 %匹配多个字符&#xff09; 查询员工信…...

Android Studio 项目文件夹结构详解

文章目录 一、项目视图概览1. Android 视图&#xff08;简化视图&#xff09;2. Project 视图&#xff08;完整物理结构&#xff09; 二、核心目录详解1. 项目根目录文件2. app 模块目录&#xff08;主模块&#xff09;2.1 manifests/2.2 java/2.3 res/ - 资源目录2.4 assets/2…...