RabbitMQ--消息堆积--解决方案

这篇具有很好参考价值的文章主要介绍了RabbitMQ--消息堆积--解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原文网址:RabbitMQ--消息堆积--解决方案_IT利刃出鞘的博客-CSDN博客

简介

本文介绍如何处理RabbitMQ消息堆积(积压)。

对于消息队列(MQ)来说,消息丢失/消息重复/消费顺序/消息堆积(积压)是比较常见的问题,都属于消息异常,这几个问题比较重要,面试中也会经常问到。

消息堆积原因

  • 消息堆积即消息没及时被消费,是生产者生产消息速度快于消费者消费的速度导致的。
  • 消费者消费慢可能是因为:本身逻辑耗费时间较长、阻塞了。

预防措施

生产者

  1. 减少发布频率
  2. 考虑使用队列最大长度限制

消费者

  1. 增加消费者的处理能力   //优化代码;使用JDK的队列缓存数据,多线程去处理(若考虑顺序问题,就采用单例线程)
  2. 默认情况下,rabbitmq消费者为单线程串行消费(org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer类的concurrentConsumers与txSize(对应prefetchCount)都是1),设置并发消费两个关键属性concurrentConsumers和prefetchCount。concurrentConsumers:设置的是对每个listener在初始化的时候设置的并发消费者的个数;prefetchCount:每次从broker里面取的待消费的消息的个数。
    配置方法:修改application.properties:
    spring.rabbitmq.listener.concurrency=m
    spring.rabbitmq.listener.prefetch=n

    Spring Amqp的解释:

    prefetchCount(prefetch)
        The number of messages to accept from the broker in one socket frame. The higher this is the faster the messages can be delivered, but the higher the risk of non-sequential processing. Ignored if the acknowledgeMode
        is NONE. This will be increased, if necessary, to match the txSize
    
    concurrentConsumers(concurrency)
        The number of concurrent consumers to initially start for each listener.

综合(使用缓存)

  • 生产者端缓存数据,在mq被消费完后再发送到mq,打破发送循环条件。设置合适的qos值(channel.BasicQos()方法:每次从队列拉取的消息数量),当qos值被用光,而新的ack没有被mq接收时,就可以跳出发送循环,去接收新的消息。
  • 消费者主动block接收进程,消费者感受到接收消息过快时主动block,利用block和unblock方法调节接收速率,当接收线程被block时,跳出发送循环。

已出事故的解决措施

情况1:堆积的消息还需要使用

方案1:简单修复

修复consumer的问题,让他恢复消费速度,然后等待几个小时消费完毕

上边只是部分内容,为便于维护,本文已迁移到此地址:RabbitMQ消息堆积的解决方案 - 自学精灵文章来源地址https://www.toymoban.com/news/detail-400362.html

到了这里,关于RabbitMQ--消息堆积--解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RabbitMQ消息丢失的场景,MQ消息丢失解决方案

    第一种 : (生产者) 生产者弄丢了数据。生产者将数据发送到 RabbitMQ 的时候,可能数据就在半路给搞丢了,因为网络问题啥的,都有可能。 第二种 : (服务端) RabbitMQ 弄丢了数据。MQ还没有持久化自己挂了 第三种 : (消费者) 消费端弄丢了数据。刚消费到,还没处理

    2024年02月08日
    浏览(44)
  • RabbitMQ(四) | 惰性队列 - 解决消息堆积问题

    接上一篇:RabbitMQ(三) | 死信交换机、死信队列、TTL、延迟队列(安装DelayExchange插件) 当生产者发送消息的速度超过了消费者处理消息的速度,就会导致队列中的消息堆积,直到队列存储消息达到上限。之后发送的消息就会成为死信,可能会被丢弃,这就是消息堆积问题。

    2024年02月01日
    浏览(37)
  • 【RabbitMQ | 第六篇】消息重复消费问题及解决方案

    什么是 消息重复消费 ?首先我们来看一下消息的传输流程。消息生产者–MQ–消息消费者;消息生产者发送消息到MQ服务器,MQ服务器存储消息,消息消费者监听MQ的消息,发现有消息就消费消息。 所以消息重复也就出现在 两个阶段 1 :生产者多发送了消息给MQ; 2 :MQ的一条

    2024年04月26日
    浏览(46)
  • 带你了解RabbitMQ:消息丢失、重复、积压的原因及其解决方案

    前言 首先说一点,企业中最常用的实际上既不是RocketMQ,也不是Kafka,而是RabbitMQ。 RocketMQ很强大,但主要是阿里推广自己的云产品而开源出来的一款消息队列,其实中小企业用RocketMQ的没有想象中那么多。 深层次的原因在于兔宝在中小企业普及更早,经受的考验也更久,很容

    2024年02月04日
    浏览(32)
  • 解决方案类常用网址

    1.操作系统类(原版操作系统下载网址)      2.ppt免费网站(不用注册)

    2024年02月01日
    浏览(40)
  • Rabbitmq消息大量堆积

    记得有次公司搞促销活动,流量增加,但是系统一直很平稳( 我们开发的系统真牛 ),大家很开心的去聚餐,谈笑风声,气氛融洽,突然电话响起.... 运维:小李,你们系统使用的rabbitmq的消息大量堆积,导致服务器cpu飙升,赶紧回来看看,服务器要顶不住了小李:好的 我们

    2024年01月15日
    浏览(40)
  • Rabbitmq消息大量堆积,我慌了!

    记得有次公司搞促销活动,流量增加,但是系统一直很平稳( 我们开发的系统真牛 ),大家很开心的去聚餐,谈笑风声,气氛融洽,突然电话响起… 运维:小李,你们系统使用的rabbitmq的消息大量堆积,导致服务器cpu飙升,赶紧回来看看,服务器要顶不住了 小李:好的 我们

    2024年01月18日
    浏览(111)
  • RabbitMQ常见问题之消息堆积

    当生产者发送消息的速度超过了消费者处理消息的速度,就会导致队列中的消息堆积,直到队列存储消息达到上限。最 早接收到的消息,可能就会成为死信,会被丢弃,这就是消息堆积问题。 解决消息堆积有三种种思路: 增加 更多消费者 ,提高消费速度 在消费者内开启 线程

    2024年01月18日
    浏览(41)
  • RabbitMq消息堆积问题及惰性队列

    当生产者发送消息的速度超过了消费者处理的速度,就会导致队列的消息堆积,知道队列存储消息达到上限。最早接受的消息,可能就会成为死信,会被丢弃,这就是消息堆积问题。 1.增加更多的消费者,提高消费者速度 2.在消费则内开启线程池加快消息处理速度 3.使用惰性

    2024年02月16日
    浏览(43)
  • ubuntu20.04打不开github网址的有效解决方案

    问题描述: 重装的ubuntu系统,chrome浏览器刚开始还能打开github网址,然后突然就打不开了,换网络也不行。 1,查询你的电脑IP对应的github网址信息 2,修改host文件,添加第1步查询到github对应的信息 3,测试问题是否解决 第1步 进入这个网址:IP/服务器assets-cdn.github.com的信息

    2024年01月22日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包