RabbitMQ 的专业术语

术语定义示例/说明
生产者(Producer)发送消息到 RabbitMQ 的客户端应用程序。日志系统将错误信息发送到 RabbitMQ。
消费者(Consumer)从 RabbitMQ 队列中接收并处理消息的客户端应用程序。一个订单处理服务从队列中读取消息并更新数据库。
Broker(消息代理)RabbitMQ 服务器,负责接收、存储和转发消息。RabbitMQ 服务实例,负责管理队列、交换器和路由规则。
队列(Queue)存储消息的容器,消费者从队列中消费消息。一个名为 order_queue 的队列存储待处理的订单消息。
交换器(Exchange)接收消息并根据路由规则转发到队列的组件,有四种类型:fanout、direct、topic、headers。Direct Exchange:根据精确路由键匹配队列;Fanout Exchange:广播消息到所有绑定队列。
路由键(Routing Key)生产者发送消息时指定的字符串,用于交换器匹配队列。发送日志消息时使用 error 作为路由键,匹配绑定到 error 的队列。
绑定(Binding)将队列与交换器关联的规则,定义消息路由路径。队列 queue_a 绑定到 exchange_1,绑定键为 user.create
信道(Channel)单个连接内部的虚拟连接,用于发送和接收消息。生产者通过一个连接创建多个信道,每个信道处理不同的任务(如发送不同消息)。
消息(Message)由消息头(属性)和消息体(数据)组成的传输单元。消息头包含 routing_keypriority,消息体是 JSON 格式的订单数据。
虚拟主机(Virtual Host)逻辑隔离的 RabbitMQ 环境,不同虚拟主机下的交换器和队列互不干扰。开发环境使用 /dev,生产环境使用 /prod 的虚拟主机。
AMQP高级消息队列协议,RabbitMQ 实现的标准化消息传输协议。定义了客户端与 Broker 通信的规则,如消息格式、传输方式等。
消息确认(Ack)消费者处理完消息后向 Broker 发送确认,避免消息丢失。消费者处理订单后发送 basicAck,Broker 删除消息;未确认则重新入队。
持久化(Durable)队列或消息的持久化配置,确保 Broker 重启后数据不丢失。声明队列时设置 durable: true,消息发送时使用 delivery_mode: 2
工作队列(Work Queue)通过多消费者分担负载,实现任务分配和负载均衡。10 个消费者并行处理队列中的消息,提高吞吐量。
发布/订阅(Pub/Sub)通过 Fanout Exchange 实现消息广播,所有绑定队列均接收消息。系统通知发送到所有订阅者(如多个监控服务)。
路由模式(Direct、Topic 等)交换器根据路由键的匹配规则路由消息。Topic Exchange:路由键 user.* 匹配 user.create 和 user.delete
Prefetch Count消费者预取消息的数量,控制消息分配公平性。设置 prefetch_count=1,确保消费者处理完一条消息后再获取下一条。
集群(Cluster)多个 RabbitMQ 节点组成的高可用架构,实现负载均衡和故障转移。三个节点组成集群,提供冗余和扩展能力。

术语分类说明

  1. 核心组件

    • 生产者、消费者、Broker、队列、交换器、信道、虚拟主机。
  2. 路由相关

    • 路由键、绑定、交换器类型(Direct/Fanout/Topic/Headers)、路由模式。
  3. 高级特性

    • 持久化、消息确认(Ack)、负载均衡(Prefetch Count)、集群。
  4. 协议与标准

    • AMQP、消息结构(头+体)。

使用场景示例


2. 消费者(Consumer)

实际应用
消费者从队列中消费消息并处理。常用于后台任务处理。
示例


3. 队列(Queue)

实际应用
队列是消息的存储和中转容器,用于解耦生产者和消费者。
示例


4. Exchange(交换器)

实际应用
交换器根据类型和路由规则分发消息。
示例


5. Routing Key(路由键)

实际应用
路由键是生产者指定的规则,用于匹配 Exchange 的路由逻辑。
示例


6. Binding(绑定)

实际应用
绑定定义 Exchange 和 Queue 的关联规则。
示例


7. 持久化(Durable)

实际应用
确保 Broker 重启后消息不丢失。
示例


8. 消息确认(Ack)

实际应用
消费者处理完消息后发送确认,避免重复消费。
示例


9. 工作队列(Work Queue)

实际应用
通过多消费者分担负载,提升处理能力。
示例


10. 发布/订阅(Pub/Sub)

实际应用
通过 Fanout 或 Topic Exchange 实现消息广播。
示例


11. 虚拟主机(Virtual Host)

实际应用
隔离不同环境或团队的资源。
示例


12. 集群(Cluster)

实际应用
实现高可用和负载均衡。
示例


13. Prefetch Count

实际应用
控制消费者消息拉取数量,避免资源过载。
示例


14. AMQP 协议

实际应用
标准化的消息格式和传输规则,支持多语言客户端。
示例


15. 路由模式(Direct/Topic 等)

实际应用
根据业务需求选择路由策略。
示例


16. 负载均衡

实际应用
通过竞争消费者模型分发任务。
示例

17. 分布式事务

实际应用
通过消息队列实现最终一致性。
示例


18. 消息重复处理

实际应用
处理 "At Least Once" 场景下的重复消息。
示例


以上术语的实际应用覆盖了 RabbitMQ 的核心场景,包括:


  • Direct Exchange
    生产者发送 Routing Key = "error",绑定到 Binding Key = "error" 的队列会收到消息。

  • Topic Exchange
    路由键 *.urgent 可匹配 email.urgentsms.urgent 等消息。

  • Fanout Exchange
    所有绑定队列均收到同一消息,适用于系统通知广播。

  • 1. 生产者(Producer)

    实际应用
    生产者是发送消息的客户端程序,通常用于异步任务触发。
    示例

  • 电商下单场景:用户提交订单后,订单服务作为生产者,将订单信息发送到 RabbitMQ 队列(如 orders_queue),通知库存服务扣减库存。
  • 日志系统:日志服务将错误日志(如 Routing Key: error)发送到 Exchange,由绑定的队列处理。
  • 库存扣减:库存服务作为消费者,从 orders_queue 中获取订单消息,执行库存扣减操作。
  • 邮件发送:邮件服务消费者从 email_queue 中读取消息,异步发送邮件,避免阻塞前端响应。
  • 流量削峰:在电商大促期间,将用户请求存入 order_queue,由多个消费者分批次处理,避免数据库崩溃。
  • 日志收集:日志消息存入 logs_queue,多个消费者并行处理日志分析任务。
  • Direct Exchange
    • 场景:日志系统按严重程度分类。
    • 绑定规则
      • 队列 error_queue 绑定 error 路由键。
      • 队列 warning_queue 绑定 warning 路由键。
    • 效果:发送 Routing Key: error 的消息只会到 error_queue
  • Fanout Exchange
    • 场景:系统通知广播。
    • 绑定规则:所有监控服务队列绑定同一个 alert_exchange
    • 效果:服务器异常消息会被所有监控队列接收。
  • Topic Exchange
    • 场景:订单状态变更通知。
    • 绑定规则
      • 队列 order_paid 绑定 order.#.paid
      • 队列 order_shipped 绑定 order.#.shipped
    • 效果:发送 Routing Key: order.123.paid 的消息会被 order_paid 队列接收。
  • 订单状态更新
    • 生产者发送 Routing Key: order.create,绑定到 order_queue
    • 发送 Routing Key: order.update,绑定到 inventory_queue
  • 日志分级
    • 使用 errorwarninginfo 作为路由键,分别路由到不同队列。
  • 发布/订阅模式
    • 多个队列(如 monitor1monitor2)绑定到同一个 alert_exchange,实现消息广播。
  • 工作队列分发
    • 队列 worker1 和 worker2 绑定到 task_exchange,根据路由键分配任务。
  • 关键业务队列:设置队列 durable: true,消息 delivery_mode: 2(持久化)。
  • 订单队列:电商订单队列必须持久化,避免服务器宕机导致订单丢失。
  • 库存扣减
    • 消费者处理订单后调用 basicAck,Broker 删除消息。
    • 若处理失败未确认,消息会重新入队,防止丢失。
  • 网络异常
    • 若消费者处理时断开,未确认的消息会被重新投递。
  • 文件处理
    • 生产者将图片上传任务发送到 image_process_queue
    • 10 个消费者并行处理,缩短用户等待时间。
  • 系统监控
    • 多个监控服务(如日志分析、告警服务)订阅同一个 alert_exchange,实时接收服务器异常消息。
  • 环境隔离
    • 开发环境使用 /dev 虚拟主机,生产环境使用 /prod,避免配置冲突。
  • 多租户系统
    • 每个租户分配独立的虚拟主机,确保消息队列互不干扰。
  • 电商大促
    • 3 个 RabbitMQ 节点组成集群,分担负载,单节点故障时自动切换,确保服务不中断。
  • 资源受限的消费者
    • 设置 prefetch_count=1,确保消费者处理完一条消息后再获取下一条,避免内存溢出。
  • 跨语言系统
    • Java 生产者发送消息到 RabbitMQ,Python 消费者通过 pika 库接收并处理。
  • 订单状态通知
    • 使用 Topic Exchange,路由键 order.#.paid 匹配所有 order.*.paid 的消息,如 order.123.paidorder.456.paid
  • 微服务实例
    • 订单服务部署 3 个容器,每个容器作为消费者从 order_queue 获取消息,RabbitMQ 自动分配,确保负载均衡。
  • 订单与库存
    1. 订单服务创建订单后,发送消息到 inventory_queue
    2. 库存服务消费消息扣减库存。
    3. 若库存扣减失败,消息重新入队,订单服务重试,保证数据一致性。
  • 幂等性设计
    • 在消费者端记录已处理消息的 Message ID,重复消息直接忽略。
    • 如订单扣款时,通过订单 ID 去重,避免重复扣款。
  • 解耦服务:通过队列隔离生产者和消费者。
  • 高可用:集群和持久化保证可靠性。
  • 灵活路由:Exchange 和 Binding 实现复杂路由逻辑。
  • 负载均衡:多消费者分担任务压力。

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

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

相关文章

mac安装vm虚拟机安装包

因为mac安装虚拟机时,发现下载过程变得不太一样,会比较麻烦。所以决定发一下我已经下载的安装包,个人用户使用免费,商业版请自行去官网下载! 百度网盘下载链接 百度网盘 请输入提取码 提取码:d4rc

LLama Factory从入门到放弃

目录 简介 安装 LLama Factory界面介绍 数据格式要求 微调训练 今天在这里介绍一种常用的大模型微调框架——LLama Factory。 简介 LLama Factory 是一个高效的界面化大语言模型微调工具库,支持多种参数高效微调技术,提供简洁接口和丰富示例&#…

如何借助全球动态IP实现多平台账号的批量注册?

无论是社交网络、在线购物平台还是专业应用软件,账号的创建和使用都是必不可少的。然而,在面对不同平台各自的注册限制和策略时,如何高效、安全且合法地进行账号批量注册成为了亟待解决的问题。本文将探讨全球动态IP在这一过程中的作用及其如…

django admin 添加自定义页面

在Django中,你可以通过多种方式向Django Admin添加自定义页面。以下是一些常见的方法: 方法1:使用ModelAdmin的get_urls()方法 如果你只是想添加一个简单的页面来展示信息,你可以在你的ModelAdmin类中重写get_urls()方法。 from…

Docker容器持久化

引言 Docker 容器作为一种轻量级、可移植的虚拟化技术,广泛应用于开发、测试和生产环境中。然而,容器天生是短暂的,意味着它们在生命周期结束后会被销毁,而其中的数据也会随之丢失。为了确保容器中的数据能够持久化,我…

ShaderToy学习笔记 02.圆

1. 画圆 1.1. 圆的方程 圆的方程是:(x^2 y^2 r^2),其中(r)是圆的半径。 我们可以使用 desmos 来验证一下。 输入 x^2 y^2 -10,即可得到圆。 类似下图 1.2. 画圆的方式 画圆:使用圆的方程,判断每个像素点是否在圆…

一文详解卷积神经网络中的卷积层和池化层原理 !!

文章目录 前言 一、卷积核大小(Kernel Size) 1. 卷积核大小的作用 2. 常见的卷积核大小 3. 选择卷积核大小的原则 二、步长(Stride) 1. Stride的作用 三、填充(Padding) 1. 填充的作用 四、通道数&#xff…

云+AI双轮驱动,亚马逊云科技加速中国企业出海新浪潮

导读:全球化就是本地化 作者 | 小葳 图片来源 | 摄图 近年来,中国企业出海步伐不断加快,“不出海,就出局”成为很多企业的共识。 据沙利文统计,2024年上半年,超过2000家中国上市企业布局海外市场&#xff…

C语言HashTable基本理解

文章目录 一、哈希表概念1. 哈希表的基本概念2. 哈希表的核心组件2.1 哈希函数2.2 冲突处理(哈希碰撞) 3.哈希表的三种结构(1) 数组作为哈希表示例: 2. Set(集合)示例:查找数组中的重复元素1. Set 基础概念…

【缓存与数据库结合最终方案】伪从技术

实现伪从技术:基于Binlog的Following表变更监听与缓存更新 技术方案概述 要实现一个专门消费者服务作为Following表的伪从,订阅binlog并在数据变更时更新缓存,可以采用以下技术方案: 主要组件 MySQL Binlog监听:使…

《100天精通Python——基础篇 2025 第3天:变量与数据类型全面解析,掌握Python核心语法》

目录 一、Python变量的定义和使用二、Python整数类型(int)详解三、Python小数/浮点数(float)类型详解四、Python复数类型(complex)详解---了解五、Python字符串详解(包含长字符串和原始字符串)5.1 处理字符串中的引号5.2 字符串的…

【前后端分离项目】Vue+Springboot+MySQL

文章目录 1.安装 Node.js2.配置 Node.js 环境3.安装 Node.js 国内镜像4.创建 Vue 项目5.运行 Vue 项目6.访问 Vue 项目7.创建 Spring Boot 项目8.运行 Spring Boot 项目9.访问 Spring Boot 项目10.实现 Vue 与 Spring Boot 联动11.安装 axios12.编写请求13.调用函数请求接口14.…

线性代数(一些别的应该关注的点)

一、矩阵 矩阵运算:线性变换 缩放、平移、旋转 无所不能的矩阵 - 三维图形变换_哔哩哔哩_bilibili

01Redis快速入门(nosql、安装redis、客户端、命令及类型、java客户端、序列化)

Redis的常见命令和客户端使用 1.初识Redis Redis是一种键值型的NoSql数据库,这里有两个关键字: 键值型 NoSql 其中键值型,是指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以是字符串…

AI编程:[体验]从 0 到 1 开发一个项目的初体验

一、开发信息 开发时间:1.5-2天工具使用: 不熟练,开发本项目前1天,才简单使用了Cursor的功能 功能复杂度: 开发的功能相对简单。页面:2个,登录页面,个人中心页面功能:5个…

LeetCode-392 判断子序列

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列&#…

Linux 系统监控大师:Glances 工具详解助力自动化

看图猜诗,你有任何想法都可以在评论区留言哦~ 摘要 Glances 是一款基于 Python 开发的跨平台系统监控工具,集成了 CPU、内存、磁盘、网络、进程等核心指标的实时监控能力,并支持命令行、Web界面、客户端-服务器模式等多种使用场景。其轻量级…

Spring Boot 3.4.5 运行环境需求

📝 Spring Boot 3.4.5 运行环境要求 🌿 1️⃣ 基本需求 ☑️ JDK版本:最低 Java 17 🔗 https://www.java.com/ 最高兼容至 Java 24 ☑️ 依赖框架:需搭配 Spring Framework 6.2.6 🔗 https://docs.sprin…

在KEIL里C51和MDK兼容以及添加ARM compiler5 version编译器

前言 我们想在一个keil里面可以打开32和51的文件,这样就不需要两个keil了 还有就是现在的keil,比如我用的是5.41的,就没有5版本的处理器,所以要安装 本篇文章我们来详细讲解如何实现上面说的两个内容 准备的东西 1.ARM5编译器 …

Flutter 弹窗队列管理:支持优先级的线程安全通用弹窗队列系统

在复杂的 Flutter 应用开发中,弹窗管理是一个常见难题。手动管理弹窗的显示顺序和条件判断不仅繁琐,还容易出错。为此,我们实现了一个支持优先级的线程安全通用弹窗队列管理系统。它能够自动管理弹窗的显示顺序,支持条件判断&…