RabbitMQ的理论知识点,和使用RabbitMQ时常见的问题点【理论】!

embedded/2024/12/22 10:00:58/

不管使用任何语言调用RabbitMQ 一般都会存在各种问题,我整理了一下 我觉得会遇到的常见问题,并记录了 解决思路 。没有提供具体代码,后续有时间写个代码体会一下,实际有了解决思路,百度里有很多代码让我们使用。哈哈

一。MA 常用交换机模式的应用场景

1.直连交换机:Direct Exchange 常用 1vs1

2.主题交换机:Topic Exchange 常用 可以 1vs1 可以 1vs多
他有两个特殊符号 “*” 和 “#” 意思 声明这个key的时候 字符串里 如果含有 * 或者 # 他会1vs多

3.扇形交换机:Fanout Exchange 常用 1vs多

4.首部交换机:Headers exchange

5.默认交换机:Default Exchange

6.死信交换机:Dead Letter Exchange 当需要记录消费失败的消息 就要创建 死信交换机
一般配合 手动ACK机制 来使用 如果 消费者里尝试多次失败 可以把消息推送到 死信队列 等待 人工处理

二。mq 持有化 消息持有化 队列持有化 和 交换机持有化

三。MQ 防止消息丢失

开启生产者 消息确认机制 然后 到 MQ后 持有化 最后 到消费者 开启手动ACK机制 默认是自动ACK(自动确认)机制
据说手动ACK 性能差 启动手动ACK 如果处理逻辑不符合规则 也有可能导致死循环
所以如果处理的消息不需要太严谨,手动ACK 可以不开启 只需要开启 生产者消息确认机制和 持有化

四。MQ 防止重复消费

大部分解决方案就是 创建 一个唯一key 放在 redis里 消费前判断
要么 数据库唯一索引

五。MQ 消费者多次消费失败 怎么处理

MQ 如果消费端 是默认的自动ACK机制 MQ是没办法监听到消费者到底执行成功了没
因为 自动ACK机制模式,RabbitMQ 会在将消息发送给消费者后立即将消息标记为已发送,而不会等待消费者处理消息的结果
所以要监听 消费者 到底成功与失败 需要开启 手动ACK模式
然后消费者如果消费失败 捕获异常 设置失败次数 如果没有达到失败次数 就重回队列 达到失败次数 进入死信队列,等待人工处理

六。MQ 延迟队列的应用场景

提交订单,但是未支付,30分钟关闭订单
需要延迟处理某个业务,可以使用这个延迟队列 这样不用轮询 监听 数据库 等等

七。消息堆积 惰性队列

增加更多消费者,提高消费速度
在消费者内开启线程池加快消息处理速度
扩大队列容积,提高堆积上限

个人觉得:在项目中使用RabbitMQ 前期需要做的工作 生产者重连、持有化、生产者确认,
别的问题点在某个业务场景使用某个队列出现了这些问题 单独为这个业务进行处理就行

生产者->绑定交换机和路由-> 交换机和路由可以找到多个队列-> 一个队列可以绑定多个消费者(队列对于消费者是竞争关系)
所以在增加消费力的时候 只需要增加消费者就行了 绑定相同的队列,而不是增加多个队列

集群MQ 就不想问题痛点了 那要多少用户量才用的上 我估计我这辈子也遇不上


http://www.ppmy.cn/embedded/19935.html

相关文章

机器人系统能用MQTT5.0代替ROS2吗?

前言 ROS2是目前最主流的机器人系统,但由于ROS2的学习曲线比较徒陗,而且对于资源受限的系统并不友好;而MQTT5.0是最新的MQTT消息传输协议,为现代IoT提供了更友好的支持,下面讨论MQTT5.0和ROS2结合使用,或机…

c#学习入门2

十、运算符 1)算术运算符是用于数值类型变量计算的运算符,它返回的结果是数值 1.赋值符号 2.算数运算符 加 减- 乘* 除/ 取余% 3.算数运算符的优先级 4.算术运算符的复合运算 5.算术运算符的自增减 2)字符串拼接 1.字符串拼接方式1 注意&…

JavaScript基础——1.js基础语法

js全称JavaScript,是一种轻量级的面向对象的编程语言,既能用在浏览器中控制页面交互,也能用在服务器端作为网站后台(借助 Node.js),因此 JavaScript 是一种全栈式的编程语言。 JavaScript 与 HTML 和 CSS 共同构成了我们所看到的网页,其中: HTML 用来定义网页的内容,…

【NC16619】传球游戏

题目 传球游戏 动态规划 思路 这道题主要考察对状态转移的理解。说实话,动态规划问题只要想到了就简单,想不到就很难,除了像背包问题那一类有固定套路的题以外,其实大部分的动态规划问题都没什么所谓的公式。还是得多练&#xf…

OneFlow 概念清单

OneFlow 是一个深度学习框架,旨在提供高性能、易用性和灵活性。以下是 OneFlow 的一些主要特点和概念: 高性能: OneFlow 旨在利用现代硬件加速深度学习训练和推理,提供高性能的计算能力。它支持在单个 GPU 或多个 GPU 之间进行分布…

AI大模型探索之路-训练篇1:大语言模型微调基础认知

文章目录 前言一、微调技术概述二、微调的必要性三、大模型的微调方法四、微调过程中的技术细节五、微调后的模型评估与应用总结 前言 在人工智能的广阔研究领域内,大型预训练语言模型(Large Language Models, LLMs)已经成为推动技术革新的关…

架构师系列- 消息中间件(15)-kafka业务实战

7.1 顺序性场景 7.1.1 场景概述 假设我们要传输一批订单到另一个系统,那么订单对应状态的演变是有顺序性要求的。 已下单 → 已支付 → 已确认 不允许错乱! 7.1.2 顺序级别 1)全局有序: 串行化。每条经过kafka的消息必须严格…

构建安全高效的前端权限控制系统

✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 ✨✨ 帅哥美女们,我们共同加油!一起进步&am…