Skip to content

讲一下这个消息队列的延时队列和死信机制 ​

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 扫码添加,备注「求职」优先通过

微信二维码

基于 VitePress 搭建

🌟训练营🤖AI面试📄做简历💻刷题