Spring boot 2.0服务:从Rabbit mq传递但未到达Java代码的消息

问题描述 投票:0回答:1

我们正在使用一个在Spring Boot 2.0之上构建并使用spring集成框架的高性能Rabbit mq用户。预取计数设置为150,并且并发使用方的数量不为4。一切正常,直到有一天,rmq中仍未收到某些消息。当我们重新启动Java服务时,未确认的消息将得到处理,但问题会在一定时间内再次蔓延。任何人都可以帮助解决这个奇怪的问题。现在,我们已经设置了cron作业,以便在1小时后重新启动服务,以使没有消息被保留。

PS spring boot版本2.0兔子mq版本:3.7.7

编辑

问题已在另一服务中返回。我们已经将Spring Boot服务升级到2.1版本和最新的spring-amqp版本。消息以unacked状态不断增加,服务中没有日志。我正在附上我们服务的threaddump

Threaddump:https://fastthread.io/my-thread-report.jsp?p=c2hhcmVkLzIwMTkvMTIvMTcvLS1hcGktZjA3MmQ1NDUtZDRlYy00ZGQxLThkZjktN2M2YzAyYjM0ZTMxZTUwZWUyYTktM2EyMC00ZDhkLThlZjctM2NmZjVlZmVlNTdkLnR4dC0t&

关于分析某些消息的PS,我认为问题一定程度上在于spring集成渠道。我在我们的服务中启用了调试日志,并发现了引起我注意的特定日志:

2019-12-17 ; 07:33:35.111 ;  WARN ; 1 --- [       Thread-3] ; o.s.a.r.l.SimpleMessageListenerContainer ;  ; Closing channel for unresponsive consumer: Consumer@7bc9e6ab: tags=[[]], channel=Cached Rabbit Channel: null, conn: Proxy@40620d8e Shared Rabbit Connection: SimpleConnection@4c060c8f [delegate=amqp://[email protected]:5672/, localPort= 45896], acknowledgeMode=AUTO local queue size=0

有人可以对此进行解释吗?>

我们正在使用一个在Spring Boot 2.0之上构建并使用spring集成框架的高性能Rabbit mq用户。预取计数设置为150,并且并发使用方的数量不为4。一切...

java spring spring-boot rabbitmq spring-integration
1个回答
1
投票

通常,有两个可能的原因-侦听器线程被“塞住”用户代码(在大多数情况下,这是问题所在)或Rabbitmq客户端库具有autoRecoveryEnabled=true;通常,Spring AMQP将其设置为false,但是在某些情况下可以将其设置为true,并且在某些特殊情况下,消费者被“悬挂”。 Spring AMQP不需要它,因为它具有自己的连接恢复机制。

© www.soinside.com 2019 - 2024. All rights reserved.