【问题标题】:RabbitMQ Delivery Acknowledgement TimeoutRabbitMQ 传递确认超时
【发布时间】:2021-08-27 11:00:23
【问题描述】:

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

【问题讨论】:

  • 到目前为止,似乎没有办法更改托管 aws rabbitmq 实例的配置 (rabbitmq.conf)。我试过rabbitmqadmin。还有另一个名为 rabbitmqctl 的工具,但我查看了文档,似乎也没有修改配置的选项。您可以选择在 EC2 实例上设置 rabbitmq 吗?然后可以直接修改rabbitmq.conf... # 30分钟,单位毫秒 consumer_timeout = 1800000
  • 您的另一个选择是立即确认消息,然后处理它们......但问题是如果消息处理不正确会发生什么?不会再被AMQ重发
  • 谢谢!这非常有帮助,我会提出 AWS 支持票,看看他们是否有任何改变这一点的选项。
  • 希望您能得到答案,如果有,请在此处更新我们 :)。祝你好运

标签: java amazon-web-services spring-boot rabbitmq amazon-mq


【解决方案1】:

这是来自 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 实例中导出配置并将其导入新实例并继续使用此实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-09
    • 2015-10-02
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多