本文介绍云消息队列 RabbitMQ 版服务端默认的消费重试策略,帮助您理解消费失败后的消息处理逻辑,并选择合适的消息处理策略。
消费重试流程
消费重试机制通过在临时性故障发生时自动重新尝试发送或处理消息,提升系统的可靠性和数据一致性。
Ready:已在队列中等待被消费的消息。
Unack:消费者已取走消息但未确认处理,表示消息已接收但处理未完成。
重试策略属性
消费重试策略由两个关键属性构成:消费超时时间和最大重试次数。
消费超时时间
指消费者在接收和处理消息时允许的最大时间限制。如果消费者未能在这个时间内完成当前消息的消费,这条消息会重新变为 Ready 状态,可被其它消费者获取处理。设置合理的消费超时时间优点:
避免长时间挂起:合理的消费超时时间可以防止消费者在处理消息时长时间挂起,导致其他消息堆积,影响系统的整体性能。
确保消息处理的可靠性:如果一个消费者长时间无法处理某条消息,云消息队列 RabbitMQ 版会将消息重新投递给其他消费者,确保消息能够被及时处理。
最大投递次数
最大投递次数(Maximum Delivery Attempt)是指系统将一条消息尝试投递给消费者的最大次数限制。设置合理的最大投递次数优点:
避免无限重试:通过设置最大投递次数,避免消息无限重复投递,防止系统资源浪费。
故障转移:当达到最大投递次数后,系统可以将消息转发到死信队列,后续开发人员可进行分析并处理。
队列的x-delivery-limit
属性表示最大重投次数,最大投递次数=x-delivery-limit+1
。
实例重试策略参数说明
实例类型 | Serverless版 | 专业版 | 企业版 | 铂金版 |
消费超时时间 | 15分钟 默认值:5分钟 | 10分钟 默认值:1分钟 | 15分钟 默认值:5分钟 | 60分钟 默认值:30分钟 |
最大投递次数 | 16 默认值:16 | 16 默认值:16 | 16 默认值:16 | 64 默认值:16 |
修改消费重试策略
变更队列的消费重试策略,需要重启消费者才能生效,请您及时重启消费者应用。
在概览页面的资源分布区域,选择地域,单击目标实例。
实例重试策略
在实例详情页面,单击重试策略页签的编辑。
在修改重试策略面板,根据上文的取值范围设置最大投递次数及消费超时时间的数值。
队列重试策略
单击左侧导航栏的Queue列表,然后单击目标队列。
在Queue详情页面,单击重试策略页签的编辑。
在修改重试策略面板,根据上文的取值范围设置是否继承实例配置、最大投递次数及消费超时时间的数值。
如果Queue继承实例配置表示当前Queue的重试策略继承了实例级别的配置,当实例级别的配置变更了,则当前Queue的重试策略配置也会随着变更。
如果Queue不继承实例配置则表示当前Queue的重试策略配置不会随着实例级别的配置变更而变更,且Queue的重试策略配置优先级高于实例级别的配置。
单击确定。