RabbitMQ发布确认及交换机类型

news2024/11/27 20:32:19

RabbitMQ发布确认机制详解

一、引言

        在消息队列(MQ)技术中,RabbitMQ因其稳定性、可靠性和易用性而受到广泛欢迎。为了确保消息的可靠传递,RabbitMQ提供了一系列高级特性,其中发布确认(Publisher Confirms)机制就是其中之一。本文将深入探讨RabbitMQ的发布确认机制,以及它如何在消息发布过程中发挥作用。

二、发布确认机制概述

        RabbitMQ的发布确认机制是一种增强消息发布可靠性的方法。当生产者(Producer)启用发布确认功能后,每次发送消息到RabbitMQ时,都会获得一个唯一的序列号(delivery tag),并从1开始递增。一旦消息被成功路由到至少一个匹配的队列,并且满足持久化条件(如果已配置),RabbitMQ会向生产者发送一个包含已确认消息序列号的basic.ack消息。

三、发布确认的三种模式

  1. 单条发布确认

    • 在发布一条消息后,生产者等待RabbitMQ的确认。
    • 缺点是每条消息都需要等待确认,可能导致性能开销较大,特别是在高并发场景下。
  2. 批量发布确认

    • 生产者可以一次发送多条消息,然后等待RabbitMQ的批量确认。
    • 当一批消息中有一条发送失败时,整个批量确认会失败,可能需要重新发送整批消息,且不容易定位到具体哪条消息失败。
  3. 异步发布确认

    • 生产者不直接等待每条消息的确认,而是通过回调函数或其他机制异步处理确认消息。
    • 这种模式可以提高性能,但也需要更复杂的编程逻辑来确保消息的可靠性。

四、如何启用发布确认

        启用发布确认功能相对简单。生产者需要先将信道设置为确认模式,通过Channel.confirmSelect()方法来激活该功能。此后,发送的每条消息都将获得一个序列号,并等待RabbitMQ的确认。

RabbitMQ交换机类型详解

        RabbitMQ作为一款广泛使用的开源消息队列软件,其强大的路由功能得益于其灵活的交换机(Exchange)类型。交换机在RabbitMQ中扮演着将消息路由到正确队列的关键角色。本文将详细介绍RabbitMQ中的四种主要交换机类型:Fanout、Direct和Topic。

一、Fanout交换机

        Fanout交换机,也被称为广播交换机,是RabbitMQ中最简单的交换机类型。当消息发送到Fanout交换机时,它会将消息广播到所有绑定到该交换机的队列中。这种交换机不考虑消息的路由键(Routing Key),因此消息传递的速度非常快。

二、Direct交换机

        Direct交换机是一种带路由功能的交换机。它根据消息的路由键将消息路由到具有相同绑定键(Binding Key)的队列中。这意味着消息的路由键必须与队列的绑定键完全匹配,消息才会被路由到该队列。

         在上面这张图中,我们可以看到 X 绑定了两个队列,绑定类型是 direct。队列 Q1 绑定键为 orange,队列 Q2 绑定键有两个:一个绑定键为 black,另一个绑定键为 green. 在这种绑定情况下,生产者发布消息到 exchange 上,绑定键为 orange 的消息会被发布到队列Q1。绑定键为 blackgreen 和的消息会被发布到队列 Q2,其他消息类型的消息将被丢弃。

三、Topic交换机

        Topic交换机在Direct交换机的基础上增加了模式匹配功能。它使用路由键中的点分隔符来支持更灵活的匹配规则。在Topic交换机中,可以使用“*”来匹配一个单词,使用“#”来匹配零个或多个单词。

下图绑定关系如下
Q1--> 绑定的是中间带 orange 带 3 个单词的字符串 (*.orange.*)
Q2--> 绑定的是最后一个单词是 rabbit 3 个单词 (*.*.rabbit)第一个单词是 lazy 的多个单词 (lazy.#)

 

上图是一个队列绑定关系图,我们来看看他们之间数据接收情况是怎么样的
quick.orange.rabbit                 被队列 Q1Q2 接收到
lazy.orange.elephant              被队列 Q1Q2 接收到
quick.orange.fox                     被队列 Q1 接收到
lazy.brown.fox                         被队列 Q2 接收到
lazy.pink.rabbit                       虽然满足两个绑定但只被队列 Q2 接收一次
quick.brown.fox                      不匹配任何绑定不会被任何队列接收到会被丢弃
quick.orange.male.rabbit        是四个单词不匹配任何绑定会被丢弃
lazy.orange.male.rabbit          是四个单词但匹配 Q2

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

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

相关文章

顶级 Vue 管理仪表板和模板

Vue.js 是当今繁忙的 Web 开发领域中最受欢迎的 JavaScript 框架之一,用于创建交互式动态用户界面。Vue.js 的组件反应性及其流畅的数据绑定使其在管理仪表板设计方面占据了主导地位。 本文讨论了一些领先的 ​​Vue 管理员仪表板,它们可以节省您制作 We…

昇思25天学习打卡营第11天|基于 MindSpore 实现 BERT 对话情绪识别

BERT是一种先进的语言模型,由Google在2018年推出。它通过双向编码器Transformer的Encoder部分,捕捉词语和句子的深层含义。BERT的创新之处在于其预训练方法,特别是Masked Language Model和Next Sentence Prediction,这使得它在问答…

【Android面试八股文】荣耀面试算法题:输入一个N阶方阵(0<N<10),输出此方阵顺时针旋转M(0<=M<=10000)次后的方阵

文章目录 1. 算法题:输入一个N阶方阵(0<N<10),输出此方阵顺时针旋转M(0<=M<=10000)次后的方阵1.1 题目描述1.2 算法实现1.2.1 步骤说明:1.2.2 算法实现1.2.3 代码实现:1.2.4 程序说明:1.2.5 示例详细讲解如何将一个矩阵顺时针旋转90度1. 算法题:输入一个N阶方…

【练习】链表题

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;算法(Java)&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 两数相加 题目描述 题解 代码实现 两两交换链表中的节点 题目描…

4、可变电阻、可变电感、可变电容(simulink仿真)

4、可变电阻、可变电感、可变电容&#xff08;simulink仿真&#xff09; 1&#xff0c;自己搭建R/L/C元件 2&#xff0c;搭建可变R/L/C元件 以第三讲为基础做此讲 MATLAB中 电气仿真元件 1&#xff0c;U/I 测量, 2&#xff0c;U/I关系方程建立受控源信号 自己的电阻 我们先将其…

基于jeecgboot-vue3的Flowable流程仿钉钉流程设计器-排它网关里数字比较大小的处理

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、在仿钉钉流程中&#xff0c;条件的数字比较跟普通的字符串比较又不一样&#xff0c;同时在flowable里也是不同的表达式&#xff0c;所以需要特殊处理 2、后端方面 增加操作符 //以下为…

Linux 注意事项

Linux 与 Windows 是两个相互独立的操作系统&#xff0c;两者有较大差距&#xff1a; 1.1 Linux 严格区分大小写&#xff08;Windows不严格区分大小写&#xff09;&#xff1b; 1.2 Linux 中所有内容&#xff0c;硬件设备都以文件形式保存在 /dev 目录下&#xff08;万物皆文件…

16_网络IPC4-数据传输

send() 用于流式套接字 向SOCKET发送数据 。 Socket 只是通信节点&#xff0c;通信之前需要连接&#xff0c;即发送端发送之前 需要知道对端的地址&#xff0c;才能找到对端的socket节点&#xff0c;才能发送成功。而接收端不同&#xff0c;接收函数 如 recv () 不需要一定知道…

【ai】学习笔记:电影推荐2:工程+ 深度学习模型

ml_movice_recommend_flask http://127.0.0.1:5000/recommend【ai】学习笔记&#xff1a;电影推荐1&#xff1a;协同过滤 TF-DF 余弦相似性 进行了学习和理解&#xff0c;成功运行了工程。本文进一步分析。不知道是否有引入语义分析&#xff1f;还是单独只是匹配算法&#xff…

吴恩达老师机器学习-ex1

线性回归 有借鉴网上部分博客 第一题 单变量 先导入相关库 import numpy as np import pandas as pd import matplotlib.pyplot as plt 读取数据&#xff0c;并展示前五行 datapd.read_csv(path,headerNone,names["Population","Profit"]) data.head…

C++基础入门(二)(函数重载,引用,内联函数,nullptr)

目录 一. 函数重载 1. 概念 2. 实现 (1). 参数类型不同 (2). 参数个数不同 (3). 参数类型顺序不同 3. 注意事项 (1). 返回值不能作为重载的条件 (2). 不能仅按函数返回类型重载 (3). 与缺省参数的问题 二. 引用 1. 概念和定义 2. 引用的特性 (1). 引用在定义时必须…

【云原生】Kubernetes微服务Istio:介绍、原理、应用及实战案例

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Spring Boot集成Spring Batch快速入门Demo

1.什么是Spring Batch&#xff1f; Spring Batch 是一个轻量级的开源框架&#xff0c;它提供了一种简单的方式来处理大量的数据。它基于Spring框架&#xff0c;提供了一套批处理框架&#xff0c;可以处理各种类型的批处理任务&#xff0c;如ETL、数据导入/导出、报表生成等。S…

Windows 、Linux、MacOS 进程管理机制

本心、输入输出、结果 文章目录 Windows 、Linux、MacOS 进程管理机制前言Windows 进程管理机制Linux 进程管理macOS 进程管理内存不够了,几个操作系统如何处理Windows 、Linux、MacOS 进程管理机制 编辑 | 简简单单 Online zuozuo 地址 | https://blog.csdn.net/qq_15071263 …

Webstorm-恢复默认UI布局

背景 在使用Webstorm的时候,有时候进行个性化设置,如字体、界面布局等. 但是设置后的效果不理想,想要重新设置回原来的模样,却找不到设置项. 这里提供一种解决方案,恢复默认设置,即恢复到最初刚下载好后的设置. 操作步骤 步骤一:打开setting 步骤二:搜索Restore Default,找到…

AI智能名片微信小程序在IP合作中的创新应用与品牌赋能策略

摘要&#xff1a;在数字化时代&#xff0c;品牌与IP&#xff08;Intellectual Property&#xff09;的合作已成为推动品牌增长、深化市场影响力的关键策略。AI智能名片微信小程序&#xff0c;作为新兴的数字营销工具&#xff0c;凭借其智能化、便捷化、社交化的特性&#xff0c…

Kafka架构详解之分区Partition

目录 一、简介二、架构三、分区Partition1.分区概念2.Offsets&#xff08;偏移量&#xff09;和消息的顺序3.分区如何为Kafka提供扩展能力4.producer写入策略5.consumer消费机制 一、简介 Apache Kafka 是分布式发布 - 订阅消息系统&#xff0c;在 kafka 官网上对 kafka 的定义…

shell详细介绍(清晰明了)

一、shell的介绍 Shell ⼀个命令解释器&#xff0c;它接收应⽤程序/⽤户命令&#xff0c;然后调⽤操作系统内核。 Shell还是⼀个功能强⼤的编程语⾔&#xff0c;易编写、易调试、灵活性强。 (1) Linux提供的shell解释器有 (2) bash 和 sh的关系 (3) Centos默认的Shell解析器…

前端学习(三)之CSS

一、什么是CSS html定义网页的结构和信息&#xff08;骨架血肉&#xff09;css定义网页的样式&#xff08;衣服&#xff09;js定义用户和网页的交互逻辑&#xff08;动作&#xff09; 通过CSS&#xff0c;可以指定页面中各个元素的颜色、字体、大小、间距、边框、背景等样式&…

YOLOv8改进 | Neck | 注意力尺度序列融合的检测框架ASF-YOLO

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…