了解MQ

简介: 消息堆积处理核心在于平衡生产与消费速度,可通过限流生产、优化消费者处理能力及异步机制缓解。RabbitMQ通过持久化、确认机制保障消息可靠性,MQTT则依赖QoS等级确保传输。延迟消息常用死信队列实现,而幂等性可通过唯一ID避免重复消费。MQ广泛用于异步处理、系统解耦及分布式事务等场景。

消息堆积如何处理

本质上就是生产者速度大于消费者速度

生产者:限制生产者发送速率

broker:优先核心业务处理,降级处理 惰性队列(针对更多是消息持久化(记录在磁盘)的时候 ,按需从内存中加载,不是直接都加载到内存中)

消费者:消费者数量,提高消费者处理能力、多线程

异步

RabbitMQ消息的可靠性与MQTT消息可靠性

RabbitMQ

生产者确认机制:publish-confirm、publish-return确保消息一定到MQ

消息持久化:借助于springAMQP声明的交换机、队列、消息默认都是持久化,或者在浏览器界面化创建的时候,勾选Durable参数,也可以默认持久化

消费者确认+重试机制:当指定队列失败次数达到上限之后,可以将消息投递给死信队列,然后人工处理

死信队列绑定交换机的key不一定要与工作队列绑定交换机的key一样(工作队列->交换机->死信队列)

生产者:重试,确认机制

broker(交换机、队列):持久化

消费者:ack确认机制

生产者确认机制:

找不到交换机:publish-confirm 返回 nack

找不到队列 : publish -confirm 返回 ack publish-return 返回异常信息

没有问题:publish-confirm 返回 ack

消费者重试:默认情况下,如果一直消费不成功,消息会不断requeue(重入队)到队列,然后再重新获取 ,因此加了一个重试机制

重试机制:实现RepublishMessageRecoverer,将失败消息投递到固定的交换机,通过交换机将消息转发到失败消息队列,程序监听失败消息队列,接收到失败消息,将失败消息存入失败消息表,通过定时任务进行处理。

持久化三要素:协同工作保障消息可靠性

组件

作用

持久化设置

注意事项

交换机持久化

确保交换机在 RabbitMQ 重启后仍然存在

durable = true

(声明交换机时)

非持久化交换机会在重启后丢失

队列持久化

确保队列在 RabbitMQ 重启后仍然存在

durable = true

(声明队列时)

非持久化队列会在重启后丢失

消息持久化

确保消息内容在 RabbitMQ 重启后仍然可用

delivery_mode = 2

(发送消息时)

即使队列持久化,消息本身也必须标记为持久化

MQTT

  1. QoS 0(最多一次)
  • 用于无关紧要的数据(如周期性温度上报,丢包不影响业务)。
  1. QoS 1(至少一次)
  • 90% 的推荐场景(如设备状态更新),配合业务幂等性成本最低。
  1. QoS 2(恰好一次)
  • 仅用于强一致性需求(如订单状态变更),注意性能损耗。

延迟消息实现(针对的是订单超时自动取消)

方案以:死信队列+ttl(消息设置存活时间,时间一到就可以进行投递到死信队列,进行专门消费者执行)

方案二:延迟队列

对于时间的设置要选择,比如30分钟取消,可以设置延迟时间35min(避免卡点行为)

如何保证MQ幂等性?或 如何防止消息重复消费?

设置消息唯一ID、或者根据消息状态判断


MQ有什么应用场景?

异步处理、系统解耦、流量削峰、日志收集与分析(ELK架构)、分布式事务最终一致性、延迟消息与定时任务

RabbitMQ 的工作模型有哪些?

  1. 工作队列模型

消费者直接绑定到队列上。

一个队列可以绑定一个或多个消费者,多个消费者绑定到一个队列会共同消费队列中的消息,提高消费能力避免消息堆积。

2.发布订阅模型

发布订阅模型可以实现一条消息发给多个队列,每个队列绑定到同一个交换机,最终实现了向多个消费者发送一条消息,这种模式称为“发布/订阅”模型。

发布订阅模型中通过交换机有不同的类型,完成将消息推送到队列:

Fanout:广播类型,将消息交给所有绑定到交换机的队列。采用轮询的方式一次只能由一个消费者消费消息(默认状态)

Direct:直接类型,基于RoutingKey(路由key)发送给订阅了消息的队列

Topic:通配符类型(主题类型),与Direct类似,只不过RoutingKey可以使用通配符 对应的# (通配hash->匹配零个或多个单词)和*(通配符->仅匹配一个单词


相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
编解码 物联网
LDPC 码在 3GPP 中的应用 | 带你读《5G-NR信道编码》之十八
本章节带你了解LDPC 码在 3GPP 中的应用。
LDPC 码在 3GPP 中的应用  | 带你读《5G-NR信道编码》之十八
【npm】解决:bat脚本中无法连续执行npm的问题
【npm】解决:bat脚本中无法连续执行npm的问题
1064 0
|
3月前
|
JSON Java fastjson
java工具:《jsonObject转map》
java工具:《jsonObject转map》
313 0
|
7月前
|
人工智能 Java API
Java 开发者必读:构建生产级 AI 大模型 (LLM) API 应用,从 OpenAI 到 Gemini 3.0 Pro 的无缝适配指南
本文以Spring Boot实战为例,介绍Java后端集成大模型的生产级方案。通过API聚合网关统一对接OpenAI、Gemini等多模型,解决网络延迟、供应商锁定与合规风险。结合n1n.ai实现标准化调用、成本控制与高可用架构,助力企业构建稳定、可扩展的AI中台基础设施。(238字)
1187 1
|
消息中间件 存储 监控
MQ线上大规模消息堆积问题处理及使用场景详解
【11月更文挑战第21天】在如今的高并发互联网应用中,消息队列(Message Queue,简称MQ)扮演着至关重要的角色
1160 1
|
Ubuntu Linux Shell
Apache介绍和安装
Apache是开源的高性能Web服务器,支持跨平台部署,具备模块化、高安全性和稳定性等特点,广泛用于企业网站、电商及内容管理系统。本文详细介绍其安装配置方法,涵盖主流Linux系统下的源码编译与包管理安装步骤。
1255 0
Apache介绍和安装
|
9月前
|
Linux 网络安全 数据安全/隐私保护
【全网最全最详细】Linux下私服Nexus安装教程
本文介绍Nexus私服的安装与配置步骤:下载解压包、创建专用用户、禁止root启动、配置权限、启动服务并开放防火墙端口,最后通过浏览器访问管理界面并获取初始密码完成初始化设置。
586 0
|
11月前
|
存储 编解码 JSON
鸿蒙应用开发从入门到实战(十):ArkUI图片组件Image
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解Image图片组件的使用。
618 1
|
Java 物联网
还在纠结抽象类和接口?看这篇就够了!
本文详细介绍经典又高频的Java面试题——抽象类和接口的区别,以及它们在实际开发中的应用场景。内容主要为以下五部分: 1.抽象类和接口的概念 2.抽象类和接口的区别 3.抽象类和接口的应用场景 4.面试中的答题技巧 5. 总结
|
Rust 监控 网络协议
EtherCAT主站IgH解析(一)--主站初始化、状态机与EtherCAT报文
本文介绍了IgH EtherCAT Master整体运行原理
3378 0
EtherCAT主站IgH解析(一)--主站初始化、状态机与EtherCAT报文