接口限流后如何等待:从 Retry-After 到退避上限
【摘要】 接口返回限流响应时,客户端需要避免立即连续重试。更稳妥的方式是优先遵守服务端给出的等待时间,同时限制没有明确提示时的重试频率。先区分明确拒绝与结果未知如果官方响应明确表示请求因限流未被接受,可以按接口文档等待后重试。连接超时、网关错误或响应丢失则不同:客户端未收到成功响应,不足以证明服务端没有处理请求。涉及创建订单或其他有副作用的操作,应先依据业务标识查状态,或使用服务端支持的幂等机制。理解...
接口返回限流响应时,客户端需要避免立即连续重试。更稳妥的方式是优先遵守服务端给出的等待时间,同时限制没有明确提示时的重试频率。
先区分明确拒绝与结果未知
如果官方响应明确表示请求因限流未被接受,可以按接口文档等待后重试。连接超时、网关错误或响应丢失则不同:客户端未收到成功响应,不足以证明服务端没有处理请求。涉及创建订单或其他有副作用的操作,应先依据业务标识查状态,或使用服务端支持的幂等机制。
理解 Retry-After
HTTP 的 Retry-After 可以表示等待的秒数,也可以表示一个 HTTP 日期。收到有效值时,应至少等待指定时长。日期格式还要考虑本机时钟误差;具体处理以服务端文档和实际响应为准。不要把它当作保证下次一定成功的承诺。
没有明确等待时间时
可以使用指数退避,并加入随机抖动,减少多个客户端同时重试的概率。例如设定初始等待、指数增长和普通网络故障的最大等待;同时设置请求总时限和重试次数。若服务端给出的有效等待时间更长,应遵守它,而不是用本地上限提前重试。
日志宜记录响应类别、等待原因、下一次计划时间和脱敏后的请求标识,不记录密钥或完整会话信息。服务恢复后,还应核对请求结果,不能把网络恢复直接当成先前业务成功。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)