一文了解消息队列:RocketMQ

什么是消息队列

Message Queue,简称MQ

是一种提供消息队列服务的中间件,也称消息中间件。

一套提供了消息生产、存储、消费全过程的软件系统

消息队列的使用场景

异步、解耦、削峰、通讯、远程调用。

异步:生产者将消息发往消息队列服务器,服务器将消息存储后就可立即返回结果。

解耦:在发布-订阅模式下,生产者生产消息,而不管消息的后续处理;消费者消费消息,而不需要管消息从何而来。生产者和消费者没有直接耦合。

削峰/限流:最典型的就是秒杀场景下,短时间内流量很大可能将服务打挂。可以用消息队列将请求存储下来慢慢消费,这样就能避免大量流量直接将后台服务打挂。

引入消息队列带来的一系列问题

  • 系统可用性降低:引入一个新的中间件MQ,就需要考虑MQ的可用性,比如消息丢失、MQ宕机等问题随之而来。
  • 系统复杂性提高,维护成本更大:引入MQ之后,需要考虑的问题更多,比如消息丢失、重复消费、顺序消费等。
  • 一致性问题:

消息队列如何解决消息丢失问题

消息队列可能丢失消息的位置有三个:

  1. 生产者发往broker的途中,因网络原因丢失。
  2. broker接收到消息后,未来得及被消费,broker宕机。
  3. 消费者拉取消息消费失败。

总之,消息没有按照使用者预期的业务流程走,我们就可称之为消息丢失。

针对这三个消息可能丢失的点,分别有如下解决策略:

  1. broker收到消息后,会返回给生产者ack确认。否则超时时间内生产者未收到确认,会重新发送消息。
  2. broker收到消息后,进行持久化。
  3. 消费者拉取消息走完业务流程后返回给broker ack 确认。

消息队列如何避免重复消费(幂等)

重复消费产生原因:

  1. 生产者为了保证消息的可靠性,会往消息服务器重复发送消息,直到收到确认成功的 ack 响应。
  2. 消费者消费消息的一般流程:拉取消息 -> 处理业务逻辑 -> 提交消费位移。假如消费者在处理完业务逻辑,还没来得及提交消费位移的时候宕机,其他消费者可能拉到这条消息重复消费。

解决方案:

消息队列如何解决顺序性问题

消息队列消息积压问题如何处理

技术选型

参考文档

消息队列面试经典十连问_Young丶的博客-CSDN博客_消息队列面试问题

进阶必看的 RocketMQ,就这篇了!

RocketMQ中的消息存储结构及删除机制_π大星的日常的博客-CSDN博客_rocketmq消息什么时候删除第5章 消息队列的核心机制 - 简书 (jianshu.com)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值