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

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 实现复杂路由逻辑。
  • 负载均衡:多消费者分担任务压力。

相关文章:

RabbitMQ 的专业术语

术语定义示例/说明生产者(Producer)发送消息到 RabbitMQ 的客户端应用程序。日志系统将错误信息发送到 RabbitMQ。消费者(Consumer)从 RabbitMQ 队列中接收并处理消息的客户端应用程序。一个订单处理服务从队列中读取消息并更新数…...

【教程】安装 iterm2 打造漂亮且高性能的 mac 终端

【教程】安装 iterm2 打造漂亮且高性能的 mac 终端_mac 安装iterm2-CSDN博客 全面解析:Github网站无法访问的解决方法! 安装myzh 参考文章:https://blog.csdn.net/qq_44741467/article/details/135727124 下载地址:GitCode - 全球开发者的开源…...

redis特性及应用场景

文章目录 什么是redis?热库redis作为热库的特性redis适用场景 什么是redis? redis在系统架构中的位置就是冷热分离架构的热数据库位置, redis就是热库, 我们一般说缓存数据库。 其他的像MySQL、SQL Server这种关系数据库、MongoDB…...

算法 | 鲸鱼优化算法(WOA)原理,公式,应用,算法改进研究综述,完整matlab代码

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 鲸鱼优化算法 一、原理与公式二、应用领域三、算法改进研究四、完整MAT…...

前端面试常见部分问题,及高阶部分问题

面试中也极有可能让你徒手写代码,无聊的面试问题o( ̄︶ ̄)o 一、HTML/CSS 基础与进阶 常见问题 什么是语义化标签?有哪些常用语义化标签? 答案:语义化标签是指具有明确含义的 HTML 标签,如 <header>、<footer>、<article>、<section> 等。它们有…...

C++初登门槛

多态 一、概念 多态是指不同对象对同一消息产生不同响应的行为。例如&#xff0c;蓝牙、4G、Wi-Fi 对“发送数据”指令有不同的具体实现。 二、核心理解 本质&#xff1a;通过基类指针或引用操作子类对象&#xff0c;实现运行时动态绑定。 表现形式&#xff1a; 接口统一&a…...

C/C++线程详解

一、C语言线程创建&#xff08;POSIX线程&#xff09; 1. 基本创建方法 POSIX线程&#xff08;pthread&#xff09;是C语言中创建线程的标准API&#xff1a; #include <pthread.h> #include <stdio.h>void* thread_func(void* arg) {printf("Thread runnin…...

红队系列-网络安全知识锦囊-CTF(持续更新)

CTF CTF系列-AWD专题篇CTF-比赛培训基础1 CTF 介绍HTTP协议分析进阶001.CTF简介_宽字节注入高级 2018CTF——黑客大赛特训CTF-PWNPWNCTF竞赛中的主要题型之一了解CTF Capture The Flag 夺旗描述:# gets从标准输入设备读字符串函数#下面是对main函数中的汇编代码的解释:modifi…...

Windows环境下常用网络命令使用

ipconfig命令使用&#xff1a; ipconfig可用于显示当前的TCP/IP配置的设置值&#xff0c;通常是用来检验人工配置的TCP/IP设置是否正确。在网络连接出现问题时&#xff0c;可以使用ipconfig /release和ipconfig /renew命令来刷新IP地址&#xff0c;这通常能解决因IP地址冲突或…...

双系统下 ubuntu 20.04 突然 开机黑屏报错 hdaudioC0D2: unable to configure disabling

双系统下 ubuntu 20.04 突然 开机黑屏报错 hdaudioC0D2: unable to configure disabling 简介:今天在开实验室开双系统台式机时,ubuntu 20.04 系统下,突然在某次关机后再开机时,本来启动好好的,但是在进行图形化启动时,本来应该是显示输入账号和密码时,直接黑屏报错了,…...

easyExcel导入导出convert

easyExcel版本2.2.7&#xff0c;3.0及以上使用不一致 类上加注解 ExcelProperty(value "下发类型",converter ComponentPurchaseBomExceladvanceStatusConvert.class)private Integer advanceStatus; 转换类 import com.alibaba.excel.converters.Converter; impo…...

C语言高频面试题——指针函数和函数指针的区别

在 C 语言中&#xff0c;指针函数 和 函数指针 是两个容易混淆的概念&#xff0c;但它们的功能和用途完全不同。以下是详细的对比分析&#xff0c;帮助你彻底理解它们的区别。 1. 指针函数&#xff08;Function Returning a Pointer&#xff09; 定义 指针函数 是一个返回值为…...

软考中级-软件设计师 知识点速过1(手写笔记)

第一章&#xff1a;数值及其转换 没什么可说的&#xff0c;包括二进制转八进制和十六进制 第二章&#xff1a;计算机内部数据表示 真值和机器数&#xff1a; 原码&#xff08;后面都拿x -19举例) &#xff1a; 反码&#xff1a; 补码&#xff1a; 移码&#xff1a; 定点数…...

【美化vim】

美化vim 涉及文件一个例子 涉及文件 ~/.vimrc修改这个文件即可 一个例子 let mapleader ,set number " 显示行号"set relativenumber " 显示相对行号set incsearch " 实时开启搜索高亮set hlsearch " 搜索结果高亮set autoinden…...

Dash框架深度解析:数据驱动型Web应用的Python化革命

一、Dash的定位与技术基因 Dash作为Python生态中的现象级框架,重新定义了数据科学家与Web应用开发之间的边界。它以**“零前端”**为核心设计理念,将React的组件化思想、Plotly的可视化能力与Flask的轻量化服务完美融合,使得Python开发者无需深入JavaScript技术栈即可构建交…...

Linux——线程(1)线程概念与控制

线程&#xff1f;这个名字我们似乎有些眼熟&#xff1f;没错&#xff0c;我们之前提到过的进程和这个有点像。但进程和线程有什么关系呢&#xff1f;本系列我们讲从线程的概念出发&#xff0c;了解一下Linux中的线程以及线程和进程的关系等内容。 一、线程的概念 线程是一个执…...

Redis LFU 策略参数配置指南

一、基础配置步骤‌ 设置内存上限‌ 在 redis.conf 配置文件中添加以下指令&#xff0c;限制 Redis 最大内存使用量&#xff08;例如设置为 4GB&#xff09;&#xff1a; maxmemory 4gb选择 LFU 淘汰策略‌ 根据键的作用域选择策略&#xff1a; # 所有键参与淘汰 maxmemory-…...

备忘录模式:实现对象状态撤销与恢复的设计模式

备忘录模式&#xff1a;实现对象状态撤销与恢复的设计模式 一、模式核心&#xff1a;在不破坏封装性的前提下保存和恢复对象状态 在软件开发中&#xff0c;经常需要实现 “撤销” 功能&#xff08;如文本编辑器的撤销修改、游戏存档读取&#xff09;。直接暴露对象内部状态会…...

蓝桥杯 5. 交换瓶子

交换瓶子 原题目链接 题目描述 有 N 个瓶子&#xff0c;编号为 1 ~ N&#xff0c;放在架子上。 例如有 5 个瓶子&#xff0c;当前排列为&#xff1a; 2 1 3 5 4每次可以拿起 2 个瓶子&#xff0c;交换它们的位置。 要求通过若干次交换&#xff0c;使得瓶子的编号从小到大…...

本地使用Ollama部署DeepSeek

以下是在本地使用Ollama部署DeepSeek的详细教程&#xff0c;涵盖安装、修改安装目录、安装大模型以及删除大模型的操作步骤。 安装Ollama 1. 系统要求 确保你的系统满足以下条件&#xff1a; 操作系统&#xff1a;macOS、Linux或者Windows。足够的磁盘空间和内存。 2. 安装…...

freecad参数化三维模型装配体解析至web端,切换参数组或修改参数

用免费开源的freecad制作全参数化的三维模型&#xff0c;并且装配&#xff0c;上传至服务器&#xff0c;解析至web端&#xff0c;用户可以切换参数或修改参数&#xff0c;驱动模型改变。 freecad全参数化装配体模型解析至web端进行参数切换、修改完整展示_哔哩哔哩_bilibili …...

前端基础之《Vue(9)—混入》

一、什么是混入 1、是一种代码复用的技巧 Vue组件是由若干选项组成的&#xff0c;向组件中混入可复用的选项。 2、作用 比如我封装两个组件&#xff0c;一个是A组件&#xff0c;一个是B组件&#xff0c;发现它里面有相同的选项&#xff0c;就可以用混用的方式来复用它。 二、…...

ORACLE DATAGUARD遇到GAP增量恢复方式修复RAC环境备机的实践

ORACLE DATAGUARD技术是一个常用的数据保护机制&#xff0c;在DATAGUARD运行过程中&#xff0c;遇到异常导致备机不同步&#xff0c;而主库的归档日志也被清理&#xff0c;此时出现GAP&#xff0c;无法同步&#xff1b;就需要人工处理&#xff1b;对于小型数据库重新全量同步数…...

机器人进阶---视觉算法(六)傅里叶变换在图像处理中怎么用

傅里叶变换在图像处理中怎么用 傅里叶变换的基本原理应用场景Python代码示例逐行解释总结傅里叶变换在图像处理中是一种重要的工具,它将图像从空间域转换到频域,从而可以对图像的频率特性进行分析和处理。傅里叶变换在图像滤波、图像增强、图像压缩和图像分析等方面都有广泛应…...

Java知识日常巩固(五)

Java中wait()和 sleep()的区别? 在Java中,wait()和sleep()方法用于线程控制,但它们之间存在几个关键区别: 1. 用途 wait():用于线程间的协作。当一个线程需要等待某个条件满足时,它会调用wait()方法释放锁并进入等待状态,直到其他线程调用相同对象的notify()或notifyAl…...

浅析锁的应用与场景

锁的应用与场景&#xff1a;从单机到分布式 摘要&#xff1a;在多线程和分布式系统中&#xff0c;“锁”是避免资源竞争、保障数据一致性的核心机制。但你真的了解锁吗&#xff1f;什么时候该用锁&#xff1f;用哪种锁&#xff1f;本文通过通俗的比喻和代码示例&#xff0c;带…...

语音合成之五语音合成中的“一对多”问题主流模型解决方案分析

语音合成中的“一对多”问题主流模型解决方案分析 引言“一对多”指的是什么&#xff1f;优秀开源模型的方法CosyvoiceSparkTTSLlaSA TTSVITS 引言 TTS系统旨在模仿人类的自然语音&#xff0c;但其核心面临着一个固有的挑战&#xff0c;即“一对多”问题 。这意味着对于给定的…...

ElementUi的Dropdown下拉菜单的详细介绍及使用

Dropdown是 ElementUI 中用于创建下拉菜单项的一个组件&#xff0c;通常el-dropdown-item 包裹在 el-dropdown 组件中使用。以下从功能特性(一些属性及方法)、使用和高级功能(高亮显示&#xff0c;滚动&#xff0c;额外传参数)三个方面进行详细介绍。 一、功能特性 1.触发方式…...

Linux麒麟 V10 系统找回 root 密码的步骤

Linux麒麟 V10 系统找回 root 密码的步骤 1 环境介绍2 操作步骤2.1重启系统并进入 GRUB 菜单2.2 输入 GRUB 账户密码2.3 修改启动参数2.4 启动系统2.5 修改root 密码2.6 重启系统 3 Linux命令全方位指南实战教程Linux命令学习使用列表 1 环境介绍 有时候root 密码忘记&#xf…...

20、 DeepSeekMoE论文笔记

DeepSeekMoE 1、**研究背景与动机**2、传统MoE一、MoE架构核心原理详解1. **标准Transformer块的结构**2. **MoE层对FFN的替代**3. **稀疏性与计算效率** 二、举例说明&#xff1a;以 N 4 N4 N4 专家、 K 2 K2 K2 为例1. **场景设定**2. **亲和度计算与专家选择**3. **输出计…...