首页 > 其他分享 >RabbitMQ消息堆积

RabbitMQ消息堆积

时间:2023-06-06 17:12:41浏览次数:24  
标签:消费 消费者 队列 RabbitMQ 死信 消息 堆积

1.堆积原因

  主要的问题有两个,第一个原因在于消费者消费消息的速度低于生产者的生产速度,其次消费者存在问题无法对消息进行消费

2.解决的思路

  根据堆积的原因我们可以我们有两种思路,其中第一种就是去限制生产者的消息生产速度,另一种就是去提高消费者的消费能力。

  2.1 限制生产者的生产速度

  这种处理方法几乎是不可能的,也不现实的。例如在电商场景,某一个时间点如果有活动可能会导致消息过多的情况,但是这是正常的业务场景,我们没办法去限制这个现象。

  2.2 提高消费者的消费速度

  但消息积压严重的时候,我们需要去诊断消费者的消费能力是否正常;在消费者能力正常的情况下,我们可以在RabbitMQ建立一个临时的队列,同时写一个消费程序不涉及消费逻辑,将原先队列中的消息转发到临时的队列中,同时借调多台临时的服务器对临时队列中的消息进行消费。以此来提高消费能力。

  需要注意的问题是:RabbitMQ默认是Pull的模式,即是RabbitMQ会主动将消息推送给消费者,而消费者会采用一个缓存进行保存消息,如果我们不加以限制,大量的消息也会堆积在RabbitMQ消费者的缓存中,导致占用过多内存,可能会导致进程下线的问题。所以我们可以通过basicQOS来限制RabbitMQ推送消息的数量。

  2.3错峰处理

  有时若没有临时服务器的资源可以临时借调,我们可以利用为消息队列绑定死信队列,同时为消息设置过期时间;当消息过时未处理的时候自动将消息传入死信队列中,我们对进入死信队列的消息可以先存入数据库等高峰过去之后再次进行处理(也有其他的处理方式)

  2.4 多线程消费

  在Spring Boot中的RabbitMQ默认采用的是单线程串行处理的方法,我们可以通过设置多个线程同时进行消费来提高消息的消费能力

标签:消费,消费者,队列,RabbitMQ,死信,消息,堆积
From: https://www.cnblogs.com/zhengjiafu-log/p/17461095.html

相关文章

  • AI 协助办公 |记一次用 GPT-4 写一个消息同步 App
    GPT-4最近风头正劲,作为NebulaGraph的研发人员的我自然是跟进新技术步伐。恰好,现在有一个将Slackchannel消息同步到其他IM的需求,看看GPT-4能不能帮我完成这次的信息同步工具的代码编写工作。本文记录了我同GPT主要的交互过程,中间删减了部分非主线对话。在开始同GPT......
  • RocketMQ:一个纯java的开源消息中间件--开发测试环境搭建
    一、简介  RocketMQ的前身是Metaq,当 Metaq 3.0发布时,产品名称改为RocketMQ    MetaQ2.x版本由于依赖了alibaba公司内部其他系统,对于公司外部用户使用不够友好,推荐使用3.0版本。   项目地址: https://github.com/alibaba/RocketMQ二、安装RocketMQ   安装Rocket......
  • RocketMQ入门(3)拉取消息
     http://www.changeself.net/archives/rocketmq%e5%85%a5%e9%97%a8%ef%bc%883%ef%bc%89%e6%8b%89%e5%8f%96%e6%b6%88%e6%81%af.html......
  • 苹果耳机Vision Pro的最新消息
    今天,在一年一度的WWDC2023大会上,Apple揭开了传闻已久的增强现实(AR)耳机VisionPro的神秘面纱。Vision Pro是Apple迄今为止最雄心勃勃的产品之一-历时一年的制造和丰富的技术足以保证天价。但今天的公告不仅仅包含硬件。除了VisionPro之外,Apple还推出了全新的操作......
  • SpringBoot配置多个RabbitMq
    YMLrabbitmq:first:username:${app.appkey}password:${app.appkey}virtual-host:${app.appid}addresses:x.x.x.x:5672,x.x.x.x:5672#集群second:username:guestpassword:guestvirtual-host:/host:......
  • Redis系列14:使用List实现消息队列
    Redis系列1:深刻理解高性能Redis的本质Redis系列2:数据持久化提高可用性Redis系列3:高可用之主从架构Redis系列4:高可用之Sentinel(哨兵模式)Redis系列5:深入分析Cluster集群模式追求性能极致:Redis6.0的多线程模型追求性能极致:客户端缓存带来的革命Redis系列8:Bitmap实现亿万级......
  • RabbitMQ配置文件及环境变量
    http://www.rabbitmq.com/configure.htmlMechanismDescriptionConfigurationFile(s)definesserverandpluginsettingsforTCPlistenersandothernetworking-relatedsettingsTLSresourceconstraints(alarms)authenticationandauthorizationbackendsmessagestore......
  • vue消息订阅与发布
    1.点一下加号: 2.安装第三方库:(pubsub-js,实现消息发布订阅也可以用其他库)  3.从收数据的人引入库“【引入之后的pubsub是一个对象,对象身上有很多有用的方法】 4.收数据的人订阅消息:【subscribe后面两个形参,第一个为消息名,第二个才是消息内容】还需要注意订阅消息的人最......
  • RabbitMQ
    一、消息队列介绍MQ的全称是MessageQueue——消息队列。MQ是一种应用程序对应用程序的通信方法。MQ是消费者-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中的消息。这样发布者和使用者都不用知道对方的存在。生产者-消费者模式是通过一......
  • 4.消息的性质和集群
    7.消息的性质7.1.消息可靠性消息的可靠性投递就是要保证消息投递过程中每一个环节都要成功,那么这肯定会牺牲一些性能,性能与可靠性是无法兼得的如果业务实时一致性要求不是特别高的场景,可以牺牲一些可靠性来换取性能。①代表消息从生产者发送到Exchange;②代表消息从Exchan......