【问题标题】:RabbitListener stops processing messages and kind of stuck sometimesRabbitListener 停止处理消息,有时会卡住
【发布时间】:2017-08-18 11:51:25
【问题描述】:

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

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

【问题讨论】:

    标签: rabbitmq spring-amqp spring-rabbit


    【解决方案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
    • 在底层连接工厂中关闭自动恢复。

    【讨论】:

    • 谢谢,但是为什么 spring amqp 不需要自动恢复..如何恢复...如果它以某种方式相同,我们可以关闭自动恢复。
    • Spring AMQP 一直有自己的恢复机制,从第一天开始——客户端库中的自动恢复相对较新; Spring AMQP 通常会更快地恢复(在生产者端),并且在消费者端会在相似的时间内恢复。
    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 2019-09-23
    • 1970-01-01
    • 2017-07-31
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多