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

不管使用任何语言调用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.mfbz.cn/a/578382.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解Python协程:从基础到实战

title: 深入理解Python协程:从基础到实战 date: 2024/4/27 16:48:43 updated: 2024/4/27 16:48:43 categories: 后端开发 tags: 协程异步IO并发编程Pythonaiohttpasyncio网络爬虫 第1章:协程基础 1.1 协程概念介绍 协程(Coroutines&…

【科学研究】读博:一场精神赌博❓

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验,帮助大家尽早适应研究生生活,尽快了解科研的本质。祝一切顺利!—…

C++必修:类与对象(一)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C学习 贝蒂的主页:Betty’s blog 1. 面向过程与面向对象 1.1. 面向过程 我们之前学习的C语言就是一种面向过程的语…

java中http调用组件深入详解

目录 一、前言 二、http调用概述 2.1 什么是http调用 2.1.1 http调用步骤 2.2 HTTP调用特点 2.3 HTTP调用应用场景 三、微服务场景下http调用概述 3.1 微服务开发中http调用场景 3.2 微服务组件中http的应用 四、常用的http调用组件 4.1 java中常用的http组件介绍 4…

用 Python 创建 Voronoi 图

概述 最常见的空间问题之一是找到距离我们当前位置最近的兴趣点 (POI)。假设有人很快就会耗尽汽油,他/她需要在为时已晚之前找到最近的加油站,解决这个问题的最佳解决方案是什么?当然,驾驶员可以检查地图来找到最近的加油站&…

力扣每日一题-总行驶距离-2024.4.25

力扣题目:总行驶距离 题目链接: 2739.总行驶距离 题目描述 代码思路 直接用数学模拟计算即可 代码纯享版 class Solution {public int distanceTraveled(int mainTank, int additionalTank) {int sum 0;while(additionalTank > 0){if(mainTank > 5){mai…

CATO原理中的数学与魔术(六)——Baby Hummer的拓展一

在上一篇中,我们从CATO原理的数学讲解进入了魔术部分,介绍了其经典作品《Baby Hummer》,相关内容请戳: CATO原理中的数学与魔术(五)——Baby Hummer CATO原理中的数学与魔术(四)——…

leetcode 221 最大正方形面积

示例 3: 输入:matrix [["0"]] 输出:0 # 最大正方形面积 def max_square(matrix):m len(matrix)n len(matrix[0])if m 0 or n 0::return Nonemax_side 1dp [[0] * (n 1) for _ in range(m 1)]for i in range(1, m 1):fo…

2024全新瀚海跑道:矢量图片迅速养号游戏玩法,每天一小时,日转现200

最初我注意到这种玩法,是因为最近在浏览各大平台的视频时,我发现了一种特殊类型的账号,其养号成功率高达90%。这些账号发布的视频内容和数据非常夸张,而且制作起来非常简单,任何人都可以轻松上手。这些账号主要发布矢量…

Spring Web MVC入门(2)——请求

目录 一、传递单个参数 基础类型和包装类型的区别 1、基础类型 (1)不传参 (2)传字符串 2、包装类型 (1)不传参 (2)传字符串 3、小结 二、传递多个参数 三、传递对象 四、…

Leetcode_相交链表

✨✨所属专栏:LeetCode刷题专栏✨✨ ✨✨作者主页:嶔某✨✨ 题目: 题解: 看到这个题目首先我们要排除链表逆置的想法,如图、因为c1节点只有一个next指针,逆置后不可能同时指向a2和b3节点。 其次有的的同学…

阿里前端常考vue面试题汇总_阿里高级vue面试题

改变 ![](https://img-blog.csdnimg.cn/img_convert/b736620bcd29f08f3685022ab5583d8b.webp?x-oss-processimage/format,png)你会发现, **只有改变的栏目才闪烁,也就是进行重绘** ,数据没有改变的栏目还是保持原样,这样就大大节…

WebSocket 深入浅出

WebSocket 深入浅出 1. WebSocket 是什么2. WebSocket 建立连接通信的过程3. WebSocket 和http的联系与区别4. WebSocket 的使用场景及限制 1. WebSocket 是什么 定义:WebSocket 是一种网络通信协议,它允许在单个TCP连接上进行全双工通信。是HTML5规范提…

网络安全实训Day15

写在前面 电子垃圾,堂堂恢复连载。本来不想分天数梳理了,但是最后要写实训报告,报告里还要有实训日记记录每日学的东西,干脆发这里留个档,到时候写报告提供一个思路。 网络空间安全实训-渗透测试 渗透测试概述 定义 一…

关于conda占C盘内存的问题

文章目录 前言一、C盘中.conda文件中的envs二、C盘中.conda文件中的pkgs 前言 最近发现C盘空间越来越少,于是就去清理了一下conda在C盘的存储,不看不知道,一看吓一跳,足足十几G!于是去网上搜索了相关的包能不能删除&a…

(3)C程序可执行文件的生成过程

原文链接:https://www.jianshu.com/p/b7e44f749211 一、可执行文件的生成 我们先通过一个简单C程序,回顾一下可执行文件的生成过程。 ​​​​​​​ ​​​​​​​ 可执行文件的生成过程如下图: 如图,可执行文…

------分割线之 WebSecurityConfigrerAdapter弃用问题------

WebSecurityConfigurerAdapter 被弃用的原因是 Spring Security 项目的维护者希望将项目的主要开发工作集中在新的配置方式上,即基于 Java 的配置(Java Configuration)和基于 Lambda 的表达式。这主要是因为 Spring 5.0 引入了重量级的 Java …

Windows系统下使用MySQL8.0.22创建第二套数据库

配置新的 MySQL 实例: 为了创建一个新的数据库实例,你需要复制 MySQL 的安装目录并创建一个新的数据目录和配置文件。假设你已经安装了 MySQL 在 C:\Program Files\MySQL\ 下,按照以下步骤操作: 复制整个 MySQL 文件夹&#xff0c…

【探索Java编程:从入门到入狱】Day2

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收…

STM32 USB HID报告描述符没有报告长度

STM32 USB HID设置(STM32CubeMX)_我也想成大侠的博客-CSDN博客 不影响鼠标功能