讲一下这个消息队列的延时队列和死信机制
RabbitMQ 的可靠性怎么做
RabbitMQ 的可靠性保障核心时确保消息不丢失,不重复,不积压,这需要从生产者,RabbitMQ 服务器,消费者三个环境层层把关。 生产者环节: 开启生产者确认机制,一旦消息被交换机接收,RabbitMQ 会返回确认通知, 如果投递失败, 确生产者可以重试。 RabbitMQ 服务器环节:防止消息在服务端丢失,要保证队列和消息都设置持久化; 消费者环节:要操作保消息能正确处理且不被重复消费,消费者需要开启这个手动确认模式,只有消息被成功出来,才手动发送通知RabbitMQ 删除消息。这里手动确认指这个代码主动发送确认通知。
什么是消息队列?
消息队列(Message Queue,简称 MQ)是一种借助“队列”在系统之间传递数据的中间件。它本质上是一个中转站:生产者把消息发进去,MQ 负责存储,消费者再从中取出处理。双方不需要直接调用对方,也不需要同时在线。
基本模型
生产者 Producer ──发送──> [ MQ Broker:存储消息 ] ──投递/拉取──> 消费者 Consumer几个核心概念:
- Producer:消息的发送方,比如订单服务。
- Broker:MQ 服务端,负责接收、持久化和分发消息。
- Consumer:消息的处理方,比如积分服务、短信服务。
- Topic / Queue:消息的分类通道,生产者往某个主题发,消费者订阅这个主题。
常见的消费模式有两种:点对点(一条消息只被一个消费者处理)和发布订阅(一条消息可被多个订阅方各自处理)。
能解决什么问题
一般概括为三点:
- 解耦:订单支付成功后只发一条“已支付”消息,库存、积分、通知等服务各自订阅,新增或下线某个下游,订单服务都不用改代码。
- 异步:非核心流程放到后台慢慢处理,主流程发完消息就能返回,接口响应更快。
- 削峰:秒杀等瞬时高峰先把请求堆在 MQ 里,后端按自身处理能力匀速消费,避免数据库被打垮。
主流产品
| 产品 | 特点 | 适用场景 |
|---|---|---|
| RabbitMQ | 基于 AMQP,路由灵活,延迟低 | 中小规模业务消息 |
| RocketMQ | 阿里开源,支持事务消息、延时消息 | 电商、金融等业务场景 |
| Kafka | 吞吐量极高,基于顺序写日志 | 日志收集、大数据流处理 |
总结
消息队列就是系统间的“异步信箱”:生产者投递、Broker 存储、消费者处理。它带来解耦、异步、削峰三大好处,同时也引入了可靠性和一致性方面的新问题,是否使用要结合业务规模权衡。
📮 联系方式
微信:BuZhiCoder | QQ:1776418445 扫码添加,备注「求职」优先通过
