背景:我使用的框架是beego,网络请求用的是Go自带的net/http,没有设置过超时时间,app的首页列表请求了15个接口,有一天其中一个接口请求了三方服务挂了,导致整个列表全凉了。

期望:其中5个主要接口成功就能显示列表,主流程能跑得通。

分析:可是客户端是同时发15个接口等全部返回后一起解析,如果拆分5个接口成功渲染一次列表,另外10个成功一次渲染一次列表,方案可行,但体验很差,多年的业务逻辑代码拆起来也容易出错,可以说是代价比较大,那么就在接口上处理,请求其他服务出错时返回正常状态码和空数组,不就可以了嘛?

看一眼接口代码,也是按上面分析处理的,那为什么还是导致全凉呢?

后来发现真正的原因是网关超时了,客户端的代码执行了网络请求失败的逻辑,那么我们就需要在服务器接口上加超时设置,超时返回正常状态码和空数组并打印日志。

搬个砖原出处,设置超时代码如下:

client := http.Client{ Timeout: 30*time.Second }
resp, err := client.Get(reqUrl)
截屏2022-05-06 下午2.15.28.png
由于版权原因,本站共享资源只供云盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件并发送到[email protected]告知,我们会在收到邮件后72小时内删除。
想开点 » golang 设置http超时时间