给接口加超时与重试:一次真实的小踩坑记录
【摘要】 前几天调一个第三方接口,程序偶尔卡住很久才报错,排查后发现是没有设超时:默认会一直等下去。教训很简单,凡是调外部接口,先把超时写死,再谈重试。我的做法是:连接超时设短一些,比如 3 秒,用于判断对方是否可达;读取超时设长一些,比如 10 秒,留给对方处理业务的时间。两者分开写,比只写一个总超时更能定位问题:连不上是网络或对方挂了,读超时多半是对方处理慢。重试也要有边界:只对 GET 这类幂等...
前几天调一个第三方接口,程序偶尔卡住很久才报错,排查后发现是没有设超时:默认会一直等下去。教训很简单,凡是调外部接口,先把超时写死,再谈重试。
我的做法是:连接超时设短一些,比如 3 秒,用于判断对方是否可达;读取超时设长一些,比如 10 秒,留给对方处理业务的时间。两者分开写,比只写一个总超时更能定位问题:连不上是网络或对方挂了,读超时多半是对方处理慢。
重试也要有边界:只对 GET 这类幂等请求、且是超时或 502、503、504 这类临时错误重试,最多 3 次,间隔用 1 秒、2 秒、4 秒递增;写操作不要盲目重试,否则可能重复下单或重复扣款。每次重试前记一条日志,写清第几次、什么错误,线上排障会省很多时间。
最后加一层兜底:超时后给用户一个可理解的提示,而不是让页面一直转圈;同时把超时时间、重试次数写进配置,不要散落在代码各处。这样下次接口变慢,先改配置就能先止血,再慢慢定位根因。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)