RabbitListener 停止处理消息,有时会卡住

RabbitListener stops processing messages and kind of stuck sometimes

环境:Spring 启动 1.4.0,RMQ 客户端:4.0.1,CloudFoundry

我的应用程序具有以下简单的 rmq conn 工厂定义

  @Bean
    public ConnectionFactory connectionFactory() {
        CachingConnectionFactory connectionFactory = new   CachingConnectionFactory();

        connectionFactory.setUsername(user);
        connectionFactory.setPassword(password);
        connectionFactory.setHost(host);
        connectionFactory.setPort(port);
        return connectionFactory;
    }

以及使用@RabbitListener 注释的简单侦听器方法。它工作正常。最近我注意到有几次即使队列中有 5k 条消息也没有处理。在 RMQ 管理控制台上,我看到它也有消费者。我试图获取线程转储但没有发现任何有趣的东西。有什么特别需要我查看线程转储的吗(我有 /dump 端点)。这种情况随时都会发生,所以到那时我会注意到日志将滚动(如果有的话),因为其他流量(如几个简单的休息端点)会不时被调用。所以这告诉我应用程序本身已启动,但只是这个侦听器部分有点卡住或挂起。我确实搜索过这个问题,这有一些问题,但很久以前就解决了。 (我不想去拉模型请:))

请告知我应该如何解决这个问题。我现在必须再次等待才能看到这个问题,因为我重新启动了应用程序并且它工作正常。

有个known problem when the underlying rabbitmq connection factory has autoRecoveryEnabled set to true.

4.0.x 客户端库现在默认启用此功能,但 Spring AMQP 不需要它;它一直有自己的恢复逻辑。

在1.6.8和1.7.1中修复(boot 1.4.0默认自带1.6.1)。 Boot 1.4.5 自带 1.6.8.

1.7.1 还禁用了 4.0.x 客户端中的选项(除非您专门提供 rabbitmq 连接工厂)。

Boot 1.5.2 默认带有 1.7.1。

选项:

  • 升级到更新的启动
  • 升级到更新的 spring-amqp 和 spring-rabbit jar
  • 关闭底层连接工厂中的自动恢复。