为保障网络波动或服务端异常场景下的交互可靠性,轻量消息队列(原 MNS)客户端按照发送端与消费端分层设计可靠性策略。
发送端重试机制
异常分类与重试触发
异常分类:分类捕获客户端异常(
MNS ClientException
,例如网络超时、限流错误码等 )或服务器异常(ServerException
),区分可重试错误(例如错误码为5xx或网络抖动等)与不可重试错误(例如资源不存在QueueNotExist
)。客户端按需重试:按照业务场景,可在业务代码中按需构建重试代码进行重发消息。
退避策略
建议采用指数退避(如初始1秒,上限60秒)叠加随机抖动策略,避免集群级重试风暴。
消费端重试机制
服务端自动重试
消费失败时(例如消息未显式ACK或消费超时),轻量消息队列(原 MNS)会根据队列的消息可见性超时时间(Visibility Timeout)在客户端拉取时重新投递消息。
消费端幂等设计
业务逻辑需天然幂等(例如通过数据库唯一键约束去重),或通过消息唯一标识
MessageId
+ 业务状态机判断消息是否已处理。
异常处理
捕获消费逻辑异常后,不主动发送确认(ACK),等待轻量消息队列(原 MNS)重投,直到消息消费成功时调用
DeleteMessage
接口删除消息。
相关文档
Java示例代码,请参见消费消息示例。
该文章对您有帮助吗?