首页 > 解决方案 > RabbitMQ 传递确认超时

问题描述

我正在通过 AWS Amazon-MQ 使用托管 RabbitMQ 集群。如果消费者快速完成他们的工作,那么一切正常。但是,根据少数情况,很少有消费者需要超过 30 分钟才能完成处理。在这种情况下,RabbitMQ 会删除消费者并使相同的消息在队列中再次可见。因此,另一个消费者拿起它并开始处理。它正在循环中发生。因此,同样的交易再次被执行,我也失去了消费者。我没有使用任何AcknowledgeMode,所以我相信它默认是 AUTO 并且有 30 分钟的限制。有什么方法可以增加 AUTO 模式的 Delivery Acknowledgement Timeout 吗?或者请让我知道是否有人对此有任何其他解决方案。

标签: javaamazon-web-servicesspring-bootrabbitmqamazon-mq

解决方案


这是来自 AWS 支持的响应。

据我了解,我看到您的工作负载当前受到 v3.8.15 中引入的 consumer_timeout 参数的影响。由于这个原因,我们已经进行了多次联系,不幸的是,服务团队已经确认虽然他们可以手动编辑 rabbitmq.conf,但这将在下次重新启动或故障转移时被覆盖,因此不是推荐的解决方案。这也意味着必须暂停应用手动更改的代理上的所有安全补丁。目前,该服务不支持从此配置文件中为 RabbitMQ 自定义用户配置,但已确认他们希望在未来解决此问题,但是无法确定何时可用。

从 RabbitMQ github 看来,这似乎是为 v3.8.15(https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.8.15)中的仲裁队列添加的,但似乎适用于所有消费者(https ://github.com/rabbitmq/rabbitmq-server/pull/2990)。

不幸的是,RabbitMQ 本身不支持降级(https://www.rabbitmq.com/upgrade.html)因此,服务团队推荐的解决方法和最安全的操作是在旧版本(3.8 .11) 并将自动次要版本升级设置为 false,使其不会升级。然后从现有的 RabbitMQ 实例中导出配置并将其导入新实例并继续使用此实例。


推荐阅读