越来越多的应用里需要依赖大量的对外请求(内部服务或第三方平台)。但是很多的 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)