# 消息队列基础问题
# 为什么要用消息队列
结合自己的项目,说明使用消息队列能为我们的系统带来下面三点好处:
- 通过异步处理提高系统性能(减少响应所需时间)。
- 降低系统耦合性。
- 削峰/限流
当然,使用消息队列带来的一些问题
- 系统复杂性提高了: 加入 MQ 之后,你需要保证消息没有被重复消费、处理消息丢失的情况、保证消息传递的顺序性等等问题!
- 一致性问题:万一消息的真正消费者并没有正确消费消息怎么办?这样就会导致数据不一致的情况了!
- 系统可用性降低:考虑消息丢失或者说 MQ 挂掉等等的情况
# 消息堆积问题 🎉
产生消息堆积的根源其实就只有两个:生产者生产太快或者消费者消费太慢。
- 因为生产者生产太快,我们可以使用一些限流降级的方法
- 消费者消费过慢的话,我们可以先检查:
- 是否是消费者出现了大量的消费错误,打印一下日志查看是否是哪一个线程卡死,出现了锁资源不释放等等的问题。
- 当然,最快速解决消息堆积问题的方法还是增加消费者实例,不过 同时你还需要增加每个主题的队列数量
消息堆积的处理策略整体上说就是生产者producer限流,RocketMQ扩容,增加消费者consumer(同时也要增加topic
的队列数量)
← 概述 RocketMQ 消息消费 →