java - RabbitMQ 传递确认超时
问题描述
我正在通过 AWS Amazon-MQ 使用托管 RabbitMQ 集群。如果消费者快速完成他们的工作,那么一切正常。但是,根据少数情况,很少有消费者需要超过 30 分钟才能完成处理。在这种情况下,RabbitMQ 会删除消费者并使相同的消息在队列中再次可见。因此,另一个消费者拿起它并开始处理。它正在循环中发生。因此,同样的交易再次被执行,我也失去了消费者。我没有使用任何AcknowledgeMode,所以我相信它默认是 AUTO 并且有 30 分钟的限制。有什么方法可以增加 AUTO 模式的 Delivery Acknowledgement Timeout 吗?或者请让我知道是否有人对此有任何其他解决方案。
解决方案
这是来自 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 实例中导出配置并将其导入新实例并继续使用此实例。
推荐阅读
- azure - 无效资源 AADSTS500011
- python - minus between 2 dataframe based on column
- javascript - 将数据从 Angular 防护传递到组件失败
- angular - primeng p-upload 图标是错误的
- arrays - 实现按日期排序在 mongo 中添加
- c# - 在插入语句期间出现异常后无法删除 SQL 数据库
- typescript - 使用反射元数据访问类装饰器参数
- django - 我不明白 sorl-thumbnail 如何使用 db 和缓存
- google-cast - 是否可以使用 Google Cast API 在 google home/cast 设备中返回之前的投射会话
- sockets - 后端服务通信时如何区分 TCP 连接?