一架梯子,一头程序猿,仰望星空!
RabbitMQ面试题 > 内容正文

RabbitMQ面试题:如何解决消息积压?


如何解决RabbitMQ消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?数百万消息持续积压几个小时,说说怎么解决?

提示:出现消息积压,主要是因为消息的消费速度跟不上消息产生的速度。

消息堆积解决策略1

消费者临时扩容,例如:原先是10个消费者,扩容10倍,100个消费者,目的是加快消息消费速度。

提示:扩容数量根据实际情况确定。

消息堆积解决策略2

修复消费者问题,消费者本身的问题,主要体现在两个方面: 业务异常和消息处理速度慢。

  • 如果是消费者自己异常了,导致无法正常消费消息,只要修复异常问题即可。
  • 如果是消费者处理速度慢,可以分析下业务代码有没有进一步提升性能的空间,有就优化,没有就走策略1扩容方案。

消息堆积解决策略3

如果消息堆积的太多,短时间内消费不完(需要几个小时,甚至更长时间),可以做个取舍,反正前面的客户已经得罪了,新的客户不能得罪,我们可以确保新的消息可以正常消费,老的消息慢慢处理。

可以新开一个队列,让新的消息投递到这个队列,新开一批消费者,处理新的消息,老的队列里面堆积的消息,让一批消费者慢慢跑。

消息堆积解决策略4

如果堆积的消息不重要,直接干掉(删除)队列,创建新的队列,处理新的消息就行,不能在一棵树上吊死。

消息堆积解决策略5

如果消息设置了TTL,这种情况,消息可能因为已经到期,被丢弃了,丢了多少我们不知道,为确保业务消息都被正常消费,这里首先要决绝的是怎么找回丢失的消息,主要思路是根据业务数据,重新投递消息到MQ中,例如:根据订单记录,如果订单未处理,重新投递消息到消息队列。


推荐教程