# 消息队列基础问题

# 为什么要用消息队列

结合自己的项目,说明使用消息队列能为我们的系统带来下面三点好处:

  1. 通过异步处理提高系统性能(减少响应所需时间)
  2. 降低系统耦合性
  3. 削峰/限流

当然,使用消息队列带来的一些问题

  1. 系统复杂性提高了: 加入 MQ 之后,你需要保证消息没有被重复消费、处理消息丢失的情况、保证消息传递的顺序性等等问题!
  2. 一致性问题:万一消息的真正消费者并没有正确消费消息怎么办?这样就会导致数据不一致的情况了!
  3. 系统可用性降低:考虑消息丢失或者说 MQ 挂掉等等的情况

# 消息堆积问题 🎉

产生消息堆积的根源其实就只有两个:生产者生产太快或者消费者消费太慢

  1. 因为生产者生产太快,我们可以使用一些限流降级的方法
  2. 消费者消费过慢的话,我们可以先检查:
    1. 是否是消费者出现了大量的消费错误,打印一下日志查看是否是哪一个线程卡死,出现了锁资源不释放等等的问题。
    2. 当然,最快速解决消息堆积问题的方法还是增加消费者实例,不过 同时你还需要增加每个主题的队列数量

消息堆积的处理策略整体上说就是生产者producer限流RocketMQ扩容增加消费者consumer(同时也要增加topic的队列数量)

Last Updated: 2 years ago