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

RabbitMQ发布确认及交换机类型

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SQL Server分布式查询:跨数据库的无缝数据探索
  • vite+vue3项目初始化搭建
  • 避免6大Python高级陷阱,让你的Python代码更优雅
  • 【React Hooks原理 - forwardRef、useImperativeHandle】
  • 【Apollo学习笔记】—— Cyber RT之创建组件, test ok
  • python Requests库7种主要方法及13个控制参数(实例实验)
  • Linux云计算 |【第一阶段】ENGINEER-DAY5
  • MyBatis-Plus的几种常见用法
  • HTML5大作业三农有机,农产品,农庄,农旅网站源码
  • C语言 | Leetcode C语言题解之第239题滑动窗口最大值
  • 线程安全性问题(一)
  • SQL Server性能监控秘籍:数据库性能计数器阈值设置指南
  • 紫光展锐5G安卓核心板T760__国产手机芯片方案
  • 【分布式存储系统HDFS】架构和使用
  • Spring Boot集成starrocks快速入门Demo
  • AHK 中 = 和 == 等比较运算符的用法
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Javascript Math对象和Date对象常用方法详解
  • leetcode388. Longest Absolute File Path
  • SpriteKit 技巧之添加背景图片
  • Web标准制定过程
  • 对JS继承的一点思考
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 前端路由实现-history
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 用Visual Studio开发以太坊智能合约
  • 如何正确理解,内页权重高于首页?
  • 说说我为什么看好Spring Cloud Alibaba
  • #在 README.md 中生成项目目录结构
  • (Oracle)SQL优化技巧(一):分页查询
  • (pojstep1.3.1)1017(构造法模拟)
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (函数)颠倒字符串顺序(C语言)
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (一)SpringBoot3---尚硅谷总结
  • ******IT公司面试题汇总+优秀技术博客汇总
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .NET Core WebAPI中封装Swagger配置
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .net操作Excel出错解决
  • .NET大文件上传知识整理
  • @Autowired 和 @Resource 区别的补充说明与示例
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [Android实例] 保持屏幕长亮的两种方法 [转]
  • [C# 开发技巧]如何使不符合要求的元素等于离它最近的一个元素
  • [Git][认识Git]详细讲解
  • [GN] 后端接口已经写好 初次布局前端需要的操作(例)
  • [godot] 采用状态机时,如何处理攻击时移动?如“冲撞”
  • [HITCON 2017]SSRFme 1