10 HTTP 调用: 超时,重试,并发
2023-10-08 本文已影响0人
滔滔逐浪
与执行本地的方法不同,进行HTTP 调用本质上是通过 HTTP 协议进行一次网络请求。
网络请求必然有超时的可能性,因此我们必须考虑到这三点。
首先 ,框架设置的默认超时是否合理;
其次: 考虑到网络的不稳定,超时后的请求重试是一个不错的选择,但是考虑到服务端接口的幂等性设计是否允许我们重试。
最后 需要考虑框架是否会像浏览器那样限制并发连接数,以免在服务并发很大的情况下,http的调用的并发数限制称为瓶颈。 springCloud 是java 微服务架构的代表性框架
如果使用Spring Cloud 进行微服务开发,就会使用feign进行声明式的服务调用
如果不使用spring Cloud,而直接使用Springboot 进行微服务开发的话,可能会直接使用java 中最常用的HTTP 客户端 Apache HttpClient 进行服务调用
连接超时代表建立TCP连接的时间,读取超时代表了等待远程返回数据的时间,也包括远端程序处理的时间。
在解决连接超时问题时,我们要搞清楚连的是谁
在遇到读取超时问题的时候,我们要综合考虑下游服务的服务标准和自己的服务标准,设置合适的读取超时的时间
此外 ,在使用诸如 Spring Cloud Feign 等框架时务必确认,连接和读取超时参数是否正确生效。
对于重试,因为 HTTP 协议认为Get 请求是数据查询操作,是无状态的,又考虑到网络出现丢包是比较常见的事情,有些代理服务器会自动重试Get/Head 请求。
如果接口设计不支持幂等,需要关闭自动重试,但, 更好的解决方案是,遵从HTTP 协议的建议来使用合适的http 方法。
来源于 Java 核心技术面试精讲