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

news2024/9/23 7:18:03

文章目录

  • 一,基本概念
  • 二,消息从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.coloradmin.cn/o/2068490.html

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

相关文章

真题解析 | CCF CSP-J 2020 入门级 C++语言真题及答案

一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项) 解析:常识题。在计算机内存中,每个存储单元都有一个唯一的标识号,这个标识号被称为地址。地址用来唯一标识内存中的每个存储单元,类似于…

【Stream】流媒体从入门到入土 (1)

最近工作需要学了很多流媒体相关的知识,谁能想象一个月前还是只听说过 HLS 的快乐小屁孩,现在已经背负了巨大的知识的重担了,头发也秃了几根,发际线严重后移 H.264 (AVC) vs H.265 (HEVC) H.264 和 H.265 是两种视频编码&#x…

【学习笔记】Day 22

一、进度概述 1、机器学习常识23-24,以及相关代码复现 2、python 补完计划(详见 python 专题) 二、详情 23、U-Net 从宏观结构上来讲(以下摘自常识23): U-Net 就是 U 形状的网络, 前半部分 (左边…

[Android studio]无法联网

问题情景: 我的Android studio 更新软件到 Android Studio Koala | 2024.1.1 Patch 1 这个版本后,当前的项目无法正常编译。 因为之前有次更新版本后,我也遇到这个无法编译的问题,后面给解决掉了。想着这次应该也没有事情。 可这…

【通信协议】SPI总线

目录 SPI简介 硬件电路 SPI模式 软件模拟初始化 时序基本单元 起始条件 终止条件 发送与接收 SPI基本单元代码 MySPI.h MySPI.c SPI简介 SPI(Serial Peripheral Interface),即串行外围设备接口,是由Motorola公司开…

在 FPGA 上实现以太网的“低级”指南

如今,我们日常的网络连接大多是通过无线方式进行的,因此很容易忘记以太网。但它仍然是一种有用的标准,是一个可靠的高吞吐量网络链接的好方法。为此,[Robert Feranec] 和 [Stacy Rieck] 编写了一个关于如何在 FPGA 上使用以太网的…

uniapp实现苹果账号登录

appleLogin(){uni.showToast({title: 正在进行苹果账户登录...,icon: none})uni.login({provider: apple,success: (loginRes) > {uni.getUserInfo({provider: apple,success: async(userInfoRes) > {console.log(用户信息, userInfoRes)// userInfoRes.userInfo.identit…

Python和MATLAB和R对比敏感度函数导图

🎯要点 深度学习网络两种选择的强制选择对比度检测贝叶斯自适应估计对比敏感度函数空间观察对比目标量化视觉皮质感知差异亮度、红/绿值、蓝/黄值色彩空间改变OpenCV图像对比度对比敏感度函数模型空间对比敏感度估计眼球运动医学研究空间时间颜色偏心率对比敏感度函…

技术债务已接管经济

“技术债务”一词通常指软件开发过程中的捷径或次优方法。它表现为设计不良的代码、缺乏文档和过时的组件。虽然正确编写的代码和文档是永恒的,但组件和方法却不是。随着时间的推移,软件及其组件可能会成为技术债务。自 40 年前的 20 世纪 80 年代软件行…

Qt使用usbcan通信

一.usbcan环境搭建 可以参照我的这篇博客&#xff1a;USBCAN-II/II使用方法以及qt操作介绍 二.项目效果展示 三.项目代码 这部分代码仅仅展示了部分功能&#xff0c;仅供参考。 #include"ControlCAN.h" #include<QDebug> #include <windows.h> #incl…

位运算,CF 878A - Short Program

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 878A - Short Program 二、解题报告 1、思路分析 顺序处理每个操作&…

数据结构(双向链表)代码详细注释

双向链表 1》双向链表的定义 双向链表也叫双链表&#xff0c;与单向链表不同的是&#xff0c;每一个节点有三个区域组成&#xff1a;两个指针域&#xff0c;一个数据域。 前指针域&#xff1a;存储前驱节点的内存地址 后指针域&#xff1a;存储后继节点的内存地址 数据域&…

Oracle归档日志满了,导致程序打不开,如何解决。

加油&#xff0c;新时代打工人&#xff01; 归档日志错误&#xff0c;登录不上&#xff0c;只能用system 角色登录&#xff0c; 错误提示 oracle 错误257 archiver error connect internal only until freed 解决cmd进入rman RMAN&#xff08;Recovery Manager&#xff09;是一…

喜报 | 麒麟信安“信创云桌面解决方案”在浙江省委党校应用实施,荣膺国家级示范案例

近日&#xff0c;国家工信部网络安全产业发展中心公布了2023年信息技术应用创新解决方案入围获奖名单&#xff0c;麒麟信安“信创云桌面解决方案”在浙江省委党校成功应用实施&#xff0c;获评国家工信部2023年信息技术应用创新解决方案党务政务领域应用示范案例。 据悉&#…

Python、R用RFM模型、机器学习对在线教育用户行为可视化分析|附数据、代码

全文链接&#xff1a;https://tecdat.cn/?p37409 分析师&#xff1a;Chunni Wu 随着互联网的不断发展&#xff0c;各领域公司都在拓展互联网获客渠道&#xff0c;为新型互联网产品吸引新鲜活跃用户&#xff0c;刺激用户提高购买力&#xff0c;从而进一步促进企业提升综合实力和…

Linux--进程管理和性能相关工具

文章目录 进程状态进程的基本状态其他更多态运行(Running或R)可中断睡眠(Interruptible Sleep 或 S)不可中断睡眠(Uninterruptible Sleep 或 D)停止(Stopped 或 T)僵尸(Zombie 或 Z) 状态转换 进程管理相关工具进程树pstreepstree -ppstree -T 进程信息psps输出属性查看进程的父…

C语言-从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件test中保存,输人的字符串以“!”结束

题目要求&#xff1a; 从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件test中保存,输人的字符串以"!”结束 1.实现程序&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {FILE* fp fopen("…

新160个crackme - 038-Eternal Bliss.3

运行分析 需要输入注册码 PE分析 VB程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 使用VB Decompiler静态分析&#xff0c;找到关键函数入口点402AC4 ida跳转至402AC4&#xff0c;按F5反汇编&#xff0c;发现有407行代码&#xff0c;配合VB Decompiler得到的代码…

力扣面试经典算法150题:跳跃游戏 II

跳跃游戏 II 今天的题目是力扣面试经典150题中的数组的中等难度题&#xff1a;跳跃游戏II。 题目链接&#xff1a;https://leetcode.cn/problems/jump-game-ii/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 给定一个非负整数数组 nums&#xff0…

springboot框架中filter过滤器的urlPatterns的匹配源码

如下图所示&#xff0c;我使用WebFilter注解的方式定义了一个过滤器&#xff0c;同时定义了过滤器的过滤条件 urlPatterns为/*,可能很多人都知道filter的/*代表所有URL都匹配&#xff0c;但是源码在哪里呢 先打断点看一下调用链 然后跟着调用链慢慢点&#xff0c;看看哪里开始…