Closed xy-peng closed 1 year ago
使用OkHttp Application Interceptor重试,OkHttp底层先会自动对DNS解析出来的多个(对于api域名是2个)重试。按现在的实现,出现网络问题是会多连接几次,有整体超时变长的可能。
例如:
api.mch.weixin.qq.com解析得到[ipa1, ipa2] (1/2的顺序随机) api2.mch.weixin.qq.com解析得到[ipb1, ipb2](1/2的顺序随机)
当前重试的顺序是 [ipa1, ipa2, ipb1, ipb2]
可以用setRetryOnConnectionFailure关闭,顺序变为 [ipa1, ipb1]
实现做了调整
disableRetryOnConnectionFailure
可关闭 OkHttp 默认的重试,并补充了 readme 说明Kudos, SonarCloud Quality Gate passed!
根据 跨城冗灾升级指引,在 HTTP 层实现了在网络失败时,使用 api2.wechatpay.cn 重试。
实现方案有两种:
IOException
时重试,修改请求的 hostname 至 api2.wechatpay.cnOkHttp.Dns
,域名解析返回 api 和 api2 混合的 IP 列表综合考虑,采用第一种方案,它虽然略微复杂,测试麻烦,但易于扩展,能有效地标识重试请求,可以跟踪重试的情况。