从Rabbit MQ传递但未到达Java代码的Spring Boot 2.0消息

时间:2018-10-26 11:20:44

标签: java spring spring-boot rabbitmq spring-integration

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

PS Spring Boot版本2.0 兔子mq版本:3.7.7

1 个答案:

答案 0 :(得分:1)

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

对于第一种情况,请进行线程转储以查看线程在做什么。

对于第二种情况,请升级到最新的spring amqp(2.0.8-引导2.0.6)或2.1.0(将是引导2.1中的版本)。