客户端中如何实现重连重试机制

为保障网络波动或服务端异常场景下的交互可靠性,轻量消息队列(原 MNS)客户端按照发送端与消费端分层设计可靠性策略。

发送端重试机制

  • 异常分类与重试触发

    • 异常分类:分类捕获客户端异常( MNS ClientException,例如网络超时、限流错误码等 )或服务器异常( ServerException),区分可重试错误(例如错误码为5xx或网络抖动等)与不可重试错误(例如资源不存在 QueueNotExist)。

    • 客户端按需重试:按照业务场景,可在业务代码中按需构建重试代码进行重发消息。

  • 退避策略

    • 建议采用指数退避(如初始1秒,上限60秒)叠加随机抖动策略,避免集群级重试风暴。

消费端重试机制

  • 服务端自动重试

  • 消费端幂等设计

    • 业务逻辑需天然幂等(例如通过数据库唯一键约束去重),或通过消息唯一标识 MessageId + 业务状态机判断消息是否已处理。

  • 异常处理

    • 捕获消费逻辑异常后,不主动发送确认(ACK),等待轻量消息队列(原 MNS)重投,直到消息消费成功时调用 DeleteMessage 接口删除消息。

相关文档

Java示例代码,请参见消费消息示例