【消息队列】6-消息堆积太多怎么办?消息过期失效怎么办?队列满了怎么办?

avatar 2020年11月20日14:14:31 6 4227 views
博主分享免费Java教学视频,B站账号:Java刘哥

消息堆积太多怎么办?消息过期失效怎么办?MQ队列满了怎么办?

当生产者疯狂生产消息,消费者消费速度又比较慢的时候,甚至消费者挂了,导致MQ堆积太多消息,甚至堆积时间久了消息被丢弃了,该怎么办?下面简单说一下

 

一、消费者挂了,消息堆积太多怎么办?

消息堆积太多,我们不可能说让他慢慢消费,等到天荒地老吧,当务之急就是快速把消息消费完,完成业务逻辑处理

1. 如果消费者挂了,紧急修复消费者项目,重新启动

2. 防止消息太多,到时候队列存不下,可以新建一个Topic,分片和队列数量为原来10倍,然后写一个临时的分发程序,把原来Topic的消息到pull过来

3. 扩容消费者,把消费者数量水平扩展到原来10倍数量,同时订阅上面新的Topic

4. 等消费完后,生产者速度平稳了,可以继续使用原来的消费者

 

二、消息过期了怎么办?

比如 RocketMQ 中,比如CommitLog到了过期时间(72小时)且处于凌晨或磁盘空间不足会被删除。

解决办法,就是重新批量生产消息,通过SQL或其他方式去查询哪些案件或订单需要重新发消息,进行补发。

 

三、MQ快写满了怎么办?

消费者在代码里判断堆积数量,如何超过一个数量,直接返回CONSUME_SUCCESS不进行逻辑处理,从而进行"丢弃"

然后走上面的二的方案,然后等半夜并发低的时候再批量重新生产消息。

也可以走第一个方案,扩容消费者

  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0