迁移自简书,格式可能未经校对。
越来越多的应用里需要依赖大量的对外请求(内部服务或第三方平台)。但是很多的 client 只有基本的请求,这在复杂的场景里根本无法应对各种问题,所以我试图整理一下之前遇到的坑,也是封装一个 httpClient 所需要支持的地方。
重试策略:
-
立即重试
-
延时重试
- 动态延时,1s 2s 4s 8s …
频率限制
-
全局 Pool
-
针对同一服务下,排队
配置级别:
-
全局
-
服务级
-
调用方
-
服务方
-
-
Request
日志记什么:
-
请求耗时
-
请求信息
-
url = host + path
-
args = header + query + form
-
-
请求结果
-
response header 一定得记
-
如果结果是简单数据,比如 json,就全记下
-
如果对方接口挂了,返回了 nginx 错误HTML,比如5xx,要记录
-
如果是文本文件流,可以记录关键部分;如果是二进制,至少记下 md5 + size
-
-
TraceId(参考 https://www.jianshu.com/p/73346f667f3d)