[高级消息队列] 消息积压的解决思路

大量消息积压在MQ里,一般是因为服务器(消费端)挂掉,或者突然收到大量请求,远超预期。

首先要明确的是,如果是收到了DDOS之类的攻击,或者本来项目的预计规模不够大,是无法很好地处理消息积压的。只能一段时间临时停机。

1)临时扩容,快速消费掉积压消息

先修复消费端的问题。然后估计积压消息的规模。如果规模过大,消费完毕恢复正常状态的时间超过可接受范围,则需要临时进行扩容。

随后写一个临时程序,将原本MQ中积压的消息分派到更多的queue中(假设每个consumer对应一个queue)。然后启动扩容的消费端进行快速消费。

2)处理即将失效的消息。

使用RabbitMQ时,若设置了TTL,则积压的数据会被清理掉。如果不能放弃这些数据,可以临时增加consumer,获取消息后立即重新写入MQ。

3)处理MQ快写满的情况。

与2)类似,只不过此时可以将消息等持久化保存,代到部分数据被消费后,在重新发送。

posted @ 2022-02-21 15:43  Cheung-10  阅读(10)  评论(0)    收藏  举报