消息堆积太多怎么办?消息过期失效怎么办?MQ队列满了怎么办?
当生产者疯狂生产消息,消费者消费速度又比较慢的时候,甚至消费者挂了,导致MQ堆积太多消息,甚至堆积时间久了消息被丢弃了,该怎么办?下面简单说一下
一、消费者挂了,消息堆积太多怎么办?
消息堆积太多,我们不可能说让他慢慢消费,等到天荒地老吧,当务之急就是快速把消息消费完,完成业务逻辑处理
1. 如果消费者挂了,紧急修复消费者项目,重新启动
2. 防止消息太多,到时候队列存不下,可以新建一个Topic,分片和队列数量为原来10倍,然后写一个临时的分发程序,把原来Topic的消息到pull过来
3. 扩容消费者,把消费者数量水平扩展到原来10倍数量,同时订阅上面新的Topic
4. 等消费完后,生产者速度平稳了,可以继续使用原来的消费者
二、消息过期了怎么办?
比如 RocketMQ 中,比如CommitLog到了过期时间(72小时)且处于凌晨或磁盘空间不足会被删除。
解决办法,就是重新批量生产消息,通过SQL或其他方式去查询哪些案件或订单需要重新发消息,进行补发。
三、MQ快写满了怎么办?
消费者在代码里判断堆积数量,如何超过一个数量,直接返回CONSUME_SUCCESS不进行逻辑处理,从而进行"丢弃"
然后走上面的二的方案,然后等半夜并发低的时候再批量重新生产消息。
也可以走第一个方案,扩容消费者
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏