springboot+rabbitmq 一个队列开了300个消费者 速度很慢是什么原因?

社会小青年丶 发布于 05/22 17:49
阅读 604
收藏 5

公司系统要将商品上架到拼多多商家后台中, 每天最少10万件,算了算平均 一分钟要上传最少70个商品,单线程的情况下一件商品需要1分钟左右,在本地开了50个消费者测试上架速度 有显著提升,但是放到三台服务器上开了将近300个消费者 速度却很慢,是不是rabbitmq需要做什么配置啊??新手不懂


这个是消费者代码

配置文件



这是yml配置文件,求大佬告知如何优化。。

加载中
0
K__
K__
哪个地方开50个线程?
社会小青年丶
社会小青年丶
我三台服务器 一台4个tomcat 一台2个tomcat 每个tomcat启动40个消费者 还有一台开了20个消费者 现在之前的问题解决了 但是有个新的问题 看下面我发的内容。。
0
冷川
冷川

有可能是其它方面的瓶颈,数据库?内存?GC?IO?之类的,这个可以监控下,一个个排查。

社会小青年丶
社会小青年丶
找到解决方案了 但是又出现新的问题了。。
0
gaomq
gaomq

第二个图中有set消费者最大数量的地方,看你写的是50。这个代码质量还可以,你能问出来这个问题这个不是你写的吧?

社会小青年丶
社会小青年丶
是我写的呢。。。。
0
f
freezingsky

调试方式: 把业务代码全部注释掉, 然后, 打印简单的hello world. 看看, 正常的队列消费是否达到期望值? 如果达到, 说明你那些业务代码,有瓶颈. 如果没达到, 说明MQ配置有问题! 就这样啦!

0
社会小青年丶
社会小青年丶

上面的问题解决了  现在有个新的问题

在消费者中调用service层方法后 一直报错异常, 然后死循环的调用同一个消费内容。

但是我service层方法中有用try catch块去处理异常 ,我打断点看了 但是他在service中调用报错了会捕获并且做相应的处理

处理完消息队列就报错监听失败 然后一直处理这种数据 ,,,,这个怎么解决

社会小青年丶
社会小青年丶
回复 @无惊泪 : 回复 @无惊泪 : 解决了 。service层 catch块异常语句那个e.getcause().getMessage()方法报错...把代码全部更新到服务器看下效果,,
无惊泪
无惊泪
消费者最外层的方法 catch里面写 channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); 出异常了 false表示忽略 不然会一直重新回到队列死循环