Go 微服务框架 go-micro 使用客户端 RPC 调用服务端方法返回 408 怎么解决?

本文我们使用 go-micro 构建微服务的服务端客户端,并使用 gin 集成客户端构建 HTTP Api,在代码中模拟客户端 RPC 调用服务端方法返回 408 的问题,以及怎么解决?,客户端输出日志:,关于 proto 和 consul 的相关内容,不是本文的重点,将不再赘述,感兴趣的读者朋友们可以查阅公众号的历史文章。,创建服务端服务的代码:,服务端方法:,客户端代码:,分别启动服务端和客户端, 然后使用 curl 请求 Api:,阅读上面的运行结果,可以发现我们构建的服务端和客户端运行正常。,我们在服务端的方法中使用 time.Sleep(10 * time.Second) 模拟延长响应时长,我们修改客户端代码,将客户端超时时间也设置为 10s。,修改客户端代码:,阅读上面这段代码,我们将客户端超时时间改为 10s,然后重启客户端应用,使用 curl 请求 Api:,运行 curl,没有返回响应结果,我们查看客户端的日志发现:,原因是服务端方法中,我们在代码中使用 time.Sleep(10 * time.Second) 模拟响应需要 10s,而在客户端中,我们定义的客户端超时时间由原来的 15s 改为 10s,所以导致返回 408 的问题。,需要注意的是,go-micro 中 client 的默认超时时间是 5s。,我们在了解完问题出现的原因之后,聪明的读者朋友们可能已经有了解决问题的方法。,解决该问题,有两种解决方法,第一种是修改 client 的超时时间,延长超时时间至足够接收到响应结果的时长,但是需要注意的是,http server 的读写时间也要满足可以接收到响应结果的时长,本文我们设置为 20s,如下所示:,而且还需要注意其上下游服务之间的超时时间,避免出现雪崩等问题。,第二种是优化服务端方法的响应时间,将其响应时间缩短至客户端的超时时间以内。具体如何优化,要根据实际情况决定,比如是否因为数据库读写耗时太长,代码的时间复杂度太高等。,本文我们介绍怎么解决客户端 RPC 调用服务端的方法,返回错误码 408 的问题,我们使用 go-micro 和 gin 构建了示例代码,并通过修改示例代码,分析出现返回错误码 408 问题的原因。,读者朋友们在遇到该问题时,建议优先采用第二种方法解决,如果使用第一种方法,需要特别注意避免分布式系统的雪崩问题。

文章版权声明

 1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/19153.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年3月5日 上午12:00
下一篇 2023年3月7日 下午10:34