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

时间:2017-03-25 15:24:14

标签: rabbitmq spring-amqp spring-rabbitmq

环境:Spring boot 1.4.0,RMQ Client: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端点)。这种情况随时都会发生,所以当我注意到日志会滚动(如果有的话)时,因为其他流量就像偶然调用一对简单的休息端点一样。所以这告诉我应用程序本身已经启动,但只是这个监听器部分有点卡住或挂起。我确实在这个问题上进行了搜索,但是这个问题有些问题但很久以前就修好了。 (我不想去拉模型请:))

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

1 个答案:

答案 0 :(得分:1)

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

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

它在1.6.8和1.7.1中修复(默认情况下启动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
  • 关闭基础连接工厂中的autoRecovery。