栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

服务器重启RabbitMQ消息涌入一个消费者

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

服务器重启RabbitMQ消息涌入一个消费者

一、问题

发送信息到交换机后,会发到两个队列(每个队列有4个消费者),消息较为均匀的分给4个消费者处理。如下图:(为0的那个是无关的队列)

 此时强行关闭服务器,会有一部分Unacked的消息没有得到处理,回到队列中。

 

然后再重新启动服务器,此时消息会全部堆积到一个消费者身上,另外三个消费者没有获取到消息。(正常来说应该均匀的分给四个消费者)

 

二、原因

这是因为在重启服务器后,线程并不是同时打开的,而是一个一个打开的。第一个打开的线程对应的消费者将会把全部的消息都获取了,导致其他通道打开之后没有消息可以获取。由于默认的上限是250,积压的消息没有达到上限,所以全部都推给了一个消费者了。

三、解决方法

给单个消费者设置未确认消息的上限,这样第一个启动的消费者揽下的消息达到上限后,就不会再接受。当其他消费者线程启动后,就可以正常分担消息。

设置配置文件spring.rabbitmq.listener.simple.perfetch=10即可。

重写启动服务器,如下:

Prefetch全部都为10,然后每个消费者的Unacked都不超过10了。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/992422.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号