0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何解决RabbitMQ消息积压的问题?

阿铭linux 来源:阿铭linux 2023-04-27 10:13 次阅读

如果你在你简历上写上了熟悉RabbitMQ,那么你在面试时很有可能会被问到,如何解决MQ消息积压?

要想将此问题回答完美,一定要多方面考虑。首先,我们要搞清楚是什么原因导致的消息积压。我列举了以下三种:

1)流量变大,而RabbitMQ服务器配置偏低,导致消息产生速度大于消费速度;

2)消费者故障,从而消息只增不减;

3)程序逻辑设计有问题,导致生产者持续生产消息,而消费者不消费或者消费慢;

当然,还有其它原因,上面三个已经能覆盖80%以上的问题。下面就以这三种情况分别来说说如何应对。

对于第一种情况,很明显就是资源不够了,解决方法也很简单,扩容即可。可以纵向扩容,即增加服务器资源,该加内存加内存,该加CPU加CPU。

如果纵向扩容不方便,那就横向扩容,即将单机改为集群模式,增加集群节点,并且增加消费者数量,让消费速度快起来!例如,原来是5个消费者,现在变成50个消费者!

对于第二种情况,要通过查看日志搞清楚为什么消费者会故障,据我多年经验,发生此类问题大概率是程序代码写的不够完美,跑着跑着导致内存溢出,然后消费者进程被杀。要想永久解决此问题,需要结合日志分析程序代码,优化代码。临时解决方法是写监控脚本,如果发现消费者进程中断,需要重启服务!

再来说第三个,这种情况发生的概率其实并不高,总之就是程序逻辑问题,判断的方法也很简单,持续观察服务器的资源耗费情况,如果内存、CPU一切都正常,但就是队列持续增长,而消费速度非常慢。此时,就需要好好查查程序代码了。当然,可以尝试增加消费者数量,看看是否有好转。

上面说的只是“亡羊补牢”的操作,但还没有说如何将当前已经积压的队列给快速消耗掉。

相信,当我们发现消息积压时,想必问题已经比较严重了,或者说已经影响到业务正常运转了,那么当务之急肯定是需要先将业务恢复正常。对于上面第二种情况,直接重启相关服务,让消费者恢复正常,定是首当其冲。

除此之外,还有一种“断尾求生”的骚操作,就是新开一个队列,将新产生的消息到新队列里,消费者也到新队列里消费。而老的队列,则需要做一个异步处理,慢慢消费掉即可。

当然,如果积压的消息不怎么重要,可有可无的话,那干脆直接删除掉,这样大家都省事不是。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10446

    浏览量

    206567
  • rabbitmq
    +关注

    关注

    0

    文章

    17

    浏览量

    974

原文标题:面试题:如何解决RabbitMQ消息积压

文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    何解决修复立磨摇臂轴承位磨损问题

    何解决修复立磨摇臂轴承位磨损问题
    发表于 03-15 15:41 0次下载

    4260纸机烘缸轴磨损是如何解决的

    电子发烧友网站提供《4260纸机烘缸轴磨损是如何解决的.docx》资料免费下载
    发表于 03-14 15:09 0次下载

    基于Docker Compose部署RabbitMQ的经验分享

    RabbitMQ 是一个功能强大的开源消息队列系统,它实现了高效的消息通信和异步处理。
    的头像 发表于 01-03 10:22 522次阅读
    基于Docker Compose部署<b class='flag-5'>RabbitMQ</b>的经验分享

    印刷锡膏时出现少锡的问题该如何解决?

    印刷锡膏时出现少锡的问题该如何解决?
    的头像 发表于 12-11 09:38 760次阅读
    印刷锡膏时出现少锡的问题该如<b class='flag-5'>何解</b>决?

    redis和rabbitMQ的区别

    Redis和RabbitMQ是两个流行的开源消息传递技术,用于构建高可靠、可扩展和可扩展的应用程序。虽然它们都用于实现消息传递机制,但它们在设计和运作方式上存在一些不同之处。在本文中,我们将详细讨论
    的头像 发表于 12-04 14:48 346次阅读

    RabbitMq入门教程

    RabbitMQ是一个开源的,在AMQP基础上完整的,可复用的企业消息系统。
    的头像 发表于 12-04 11:10 271次阅读
    <b class='flag-5'>RabbitMq</b>入门教程

    何解决直插差模电感异响问题

    13、如何解决直插差模电感的异响
    发表于 11-20 09:35 3次下载

    RabbitMQ是什么

    在工作中经常会用到消息队列处理各种问题,今天指北君带领大家来学一个很常用到的技术-RabbitMQ;接下来还会有关于RabbitMQ的系列教程,对你有帮助的话记得关注哦~ RabbitMQ
    的头像 发表于 09-25 14:36 551次阅读
    <b class='flag-5'>RabbitMQ</b>是什么

    RabbitMQ通信模型中的work模型

    上一篇文章中,简单的介绍了一下RabbitMQ,以及安装和hello world。 有的小伙伴留言说看不懂其中的方法参数,这里先解释一下几个基本的方法参数。 // 声明队列方法
    的头像 发表于 09-25 14:34 309次阅读
    <b class='flag-5'>RabbitMQ</b>通信模型中的work模型

    RabbitMQ中的发布订阅模型

    上一篇文章中,简单的介绍了一下RabbitMQ的work模型。这篇文章来学习一下RabbitMQ中的发布订阅模型。 发布订阅模型(Publish/Subscribe):简单的说就是队列里面的消息会被
    的头像 发表于 09-25 14:30 321次阅读
    <b class='flag-5'>RabbitMQ</b>中的发布订阅模型

    RabbitMQ中的路由模型(direct)

    路由模型 RabbitMQ 提供了五种不同的通信模型,上一篇文章中,简单的介绍了一下RabbitMQ的发布订阅模型模型。这篇文章来学习一下RabbitMQ中的路由模型(direct)。 路由模型
    的头像 发表于 09-25 11:32 280次阅读

    RocketMQ和RabbitMQ的区别

    RocketMQ和RabbitMQ的区别: 架构设计:RocketMQ是基于主题(Topic)的发布/订阅模式,而RabbitMQ则是基于队列(Queue)的消息代理系统。 语言支持
    的头像 发表于 07-24 13:39 1.1w次阅读

    rabbitmq是什么?rabbitmq安装、原理、部署

    rabbitmq是什么? MQ的全称是Messagee Queue,因为消息的队列是队列,所以遵循FIFO 先进先出的原则是上下游传递信息的跨过程通信机制。 RabbitMQ是一套开源(MPL
    的头像 发表于 07-19 13:50 718次阅读

    RabbitMQ:消息传递的中介

    电子发烧友网站提供《RabbitMQ:消息传递的中介.zip》资料免费下载
    发表于 06-14 16:08 0次下载
    <b class='flag-5'>RabbitMQ</b>:消息传递的中介

    Rabbitmq与esp-open-rtos集成失败了怎么解决?

    我尝试将 Rabbitmq 与 esp-open-rtos 集成,但失败了。 谁能帮忙?
    发表于 05-10 11:45