【java开发消息中间件MQ篇】之mq消息堆积、消息过期、mq内存爆棚怎么处理?

1,171 阅读2分钟

前言: mq的种类很多,知识点也很多,容我娓娓道来,此文章仅代表鄙人的总结和理解,如有错漏,欢迎指正...

一、mq消息堆积

场景:消息堆积了几个小时,量太大,如果逐步恢复的话需要一两个小时,怎么办?
解决方案:
临时操作扩容消费者
1、先修复好损坏的消费者服务。
2、设置10倍的queue队列数量
3、征用10倍的机器来部署consumer,每一批consumer消费一个临时queue的消息
4、等快速消化之后,部署原来的消费者服务

二、消息过期

场景:消息设置了过期时间,过期就丢了怎么办?
假设你用的是rabbitmq,rabbitmq是可以设置过期时间的,就是TTL,如果消息在queue中积压超过一定的时间就会被rabbitmq给清理掉,这个数据就没了。
解决方案:
在流量低峰期(比如夜深人静时),写一个程序,手动去查询丢失的那部分数据,然后将消息重新发送到mq里面,把丢失的数据重新补回来。

三、mq内存爆棚

场景:积压消息长时间没有处理,mq放不下了怎么办?
解决方案:
这个就没有办法了,肯定是第一方案执行太慢,这种时候只好采用 “丢弃+批量重导” 的方式来解决了。

1、临时写个程序,连接到mq里面消费数据,收到消息之后直接将其丢弃,快速消费掉积压的消息,降低MQ的压力
2、在晚上夜深人静时去手动查询重导丢失的这部分数据。

四、总结

1、后台定时任务每隔72小时,删除旧的没有使用过的消息信息
2、根据不同的业务实现不同的丢弃任务,选择不同的策略淘汰任务,例如FIFO/LRU等
3、消息定时转移,或者对某些重要的 TAG 型(支付型)消息真正落库

更多相关【java开发消息中间件MQ篇】系列文章,请查阅我的个人博客哦...


结语:以往都是看别人的博客进行学习技术,其中不乏有精华博客也有吊儿郎当的CV大法文章,所以决定将自己所学所用所整理的知识分享给大家,主要还是想为了后浪们少走些弯路,多些正能量的博客,如有错漏,欢迎指正,仅希望大家能在我的博客中学到知识,解决到问题,那么就足够了。谢谢大家!(转载请注明原文出处)