谷粒商城实战笔记-249-商城业务-消息队列-RabbitMQ工作流程

news/2025/3/13 17:56:57/

文章目录

  • 一,基本概念
  • 二,消息从producer到consumer的过程

一,基本概念

RabbitMQ是一个流行的开源消息代理软件,它实现了高级消息队列协议(AMQP)。以下是RabbitMQ的一些基本概念:

在这里插入图片描述

  1. Broker

    • 消息代理本身,负责维护路由信息并负责消息的传递。
  2. Exchange

    • 接收生产者发送的消息,然后根据路由规则将消息路由到一个或多个队列。RabbitMQ中有多种类型的交换器,包括direct, fanout, topic, headers等。
  3. Queue

    • 存储消息的实体,直到它们被消费者消费。队列可以设置为持久化的,以保证消息在系统崩溃后不会丢失。
  4. Binding

    • 交换器和队列之间的虚拟连接,通过它可以实现消息的路由。
  5. Routing Key

    • 在消息传递过程中,用于指定消息应该路由到哪个队列的键。
  6. Virtual Host(vhost):

    • 命名空间,逻辑上分割不同的消息应用,每个vhost都有自己的队列、交换器和绑定。
  7. Connection

    • 应用程序与RabbitMQ broker之间的网络连接。
  8. Channel

    • 连接中的一个信道,几乎所有的操作都在信道上进行。信道是轻量级的,可以在一条连接上并行使用多个信道。
  9. Producer

    • 发送消息到交换器的应用程序或服务。
  10. Consumer

    • 从队列中接收消息的应用程序或服务。
  11. Message

    • 传输的数据,可以是文本、JSON、二进制数据等。
  12. Acknowledgment(ACK):

    • 消费者处理完消息后发送给RabbitMQ的确认信号,表示消息已经被成功处理。
  13. Durability

    • 消息或队列的持久化设置,确保在Broker重启后消息或队列不会丢失。
  14. Auto Acknowledgment

    • RabbitMQ自动发送ACK给生产者,无需消费者显式确认。
  15. Quality of Service (QoS)

    • 消费者可以设置QoS参数,例如预取数量,以控制从队列中获取的消息数量。
  16. Dead Letter Exchange(DLX):

    • 当消息无法被队列正常处理时,可以被发送到DLX,DLX是一个特殊的交换器,用来处理死信。
  17. Exchange-to-Exchange Binding

    • 交换器之间可以相互绑定,实现消息的进一步路由。
  18. Persistent Message

    • 设置消息为持久化的,以保证消息在Broker重启后不会丢失。
  19. TTL (Time To Live)

    • 设置消息的生存时间,超过这个时间后,消息将被自动删除。
  20. Publisher Confirms

    • 生产者可以等待Broker的确认,以确保消息被正确交换和路由。

二,消息从producer到consumer的过程

一条消息在RabbitMQ中从生产者(Producer)到消费者(Consumer)的全过程涉及多个步骤和组件。以下是详细的过程:

  1. 建立连接(Connection)

    • 生产者和消费者分别与RabbitMQ Broker建立网络连接。
  2. 创建信道(Channel)

    • 在RabbitMQ中,几乎所有的操作都是在信道上进行的。生产者和消费者在各自的连接上创建一个信道。
  3. 声明交换器(Exchange Declaration)

    • 生产者在信道上声明一个交换器,指定交换器的名称和类型(direct, fanout, topic, headers等)。
  4. 声明队列(Queue Declaration)

    • 消费者在信道上声明一个队列,用于接收消息。
  5. 绑定队列到交换器(Binding)

    • 将队列绑定到交换器上,可以通过路由键(Routing Key)指定,这样交换器就知道如何根据消息的路由键将消息路由到正确的队列。
  6. 发送消息(Publish Message)

    • 生产者发送消息到交换器。消息包含路由键和消息体。
  7. 路由消息(Route Message)

    • 交换器根据路由键和绑定将消息路由到一个或多个队列。
  8. 消息存储(Message Storage)

    • 消息被存储在队列中,等待消费者消费。如果队列配置为持久化的,消息会存储在磁盘上。
  9. 消费者订阅队列(Consumer Subscription)

    • 消费者通过信道订阅队列,开始监听队列中的消息。
  10. 接收消息(Receive Message)

    • 当消费者订阅队列后,它会从队列中接收消息。
  11. 消息确认(Acknowledgment)

    • 消费者处理完消息后,向RabbitMQ发送一个确认信号(ACK)。如果配置了自动确认(Auto Ack),则不需要显式发送ACK。
  12. 消息删除

    • 一旦消息被确认,它会被从队列中删除。
  13. 消息持久化(Durability)

    • 如果消息或队列被标记为持久化,即使Broker重启,消息也不会丢失。
  14. 消息拒绝和死信(Message Rejection and Dead Letter)

    • 如果消费者无法处理消息,它可以拒绝消息。如果消息被拒绝的次数达到一定阈值,它可能会被发送到死信交换器(Dead Letter Exchange)。
  15. 关闭信道和连接

    • 一旦消息被消费,消费者可以选择关闭信道和连接,或者继续监听队列以接收新消息。

http://www.ppmy.cn/news/1516972.html

相关文章

3 pytest Fixture

目录 3.1 通过 conftest.py 共享 fixture3.2 使用 fixture 执行配置及销毁逻辑3.3 使用 --setup-show 回溯 fixture 的执行过程3.4 使用 fixture 传递测试数据3.5 使用多个 fixture3.6 指定 fixture 作用范围3.7 使用 usefixtures 指定 fixture3.8 为常用 fixture 添加 autouse…

windows C++- WRL 使用计时器

由于WRL技术已经不作为主流继续发展,所以这里这个文档主要是收录WRL作为一些特殊情况下的查阅和理解windows体系开发的技术脉络,故本文档仅仅演示各项关键技术,例如本文档如何使用 Windows 运行时 C 模板库 (WRL) 启动异步操作并在操作完成时…

.ipynb文件:交互式 Jupyter Notebook

Python 接口文件(带有扩展名的文件.pyi),或称为 Python 存根文件,在使用类型提示增强 Python 代码方面发挥着至关重要的作用。 当你遇到名称以 .ipynb、.pyi、.pyc 等结尾的 Python 文件时,你是否会感到困惑&#xff…

asp.net core在win上的发布和部署

一、asp.net core两种发布方式 1、两个发布方式——【框架依赖发布】和【独立发布】 2、两种发布方式的差别 二、发布的详细过程 1、【生成】->【发布】 2、框架依赖发布 设置发布参数,然后进行发布 发布好的文件,把它们放到一个新的目录文件夹里 …

LLaMA Factory微调Llama3模型

LLaMA Factory是一款开源低代码大模型微调框架,集成了业界最广泛使用的微调技术,支持通过Web UI界面零代码微调大模型,目前已经成为开源社区内最受欢迎的微调框架。 💥GPU推荐使用24GB显存的A10(ecs.gn7i-c8g1.2xlarg…

百度:未来or现在 顾此失彼?

用AI押注未来,却丢了现在 国内AI先行者百度 走到哪了? 作为这个星球最热门的概念,AI无疑是个好故事,不只是百度,美股的一众科技公司几乎都在讲述自己的AI投入及发展成果,市值也随着AI预期坐过山车。而市场…

css基础学习总结(一)

文章目录 一. 选择器1. 标签选择器2. 类选择器3. ID选择器4. 分组选择器5. 派生与子元素选择器6. 属性选择器7. 伪类选择器8. 伪对象选择器9. 选择器的优先级别css优先级 的 6大分类 一. 选择器 1. 标签选择器 选择器例子描述elementp/div/span选择所有含有指定标签的元素 &…

神经网络参数个数的计算

计算神经网络中参数的个数取决于网络的结构,包括层的类型和每层的节点数。以下是一些常见层类型的参数计算方法: 全连接层(Fully Connected Layer): 参数个数 输入节点数 输出节点数 输出节点数(偏置项…