feign-client在第一次调用微服务会出现Read timed out
异常,提示的报错信息:
java.net.SocketTimeoutException: Read timed out
这是由于在调用其他微服务接口前,会去请求该微服务的相关信息(地址、端口等),并做一些初始化操作,由于默认的懒加载特性,导致了在第一次调用时,出现超时的情况,解决方法主要有两种:
第一种办法是设置超时时间,具体设置成多少,因项目而异,配置如下:
# 全局关闭Hystrix超时,对所有微服务有效
hystrix.command.default.execution.timeout.enabled: false
# 关闭某一个微服务的超时
hystrix.command.<serviceName>.execution.timeout.enabled: false
# 全局设置超时时间为60秒
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 60000
# 设置某一个微服务的超时时间为60秒
hystrix.command.<serviceName>.execution.isolation.thread.timeoutInMilliseconds: 60000
# 设置ribbon超时时间
ribbon:
ReadTimeout: 20000
ConnectTimeout: 20000
第二种办法,也是比较推荐的方式,配置ribbon立即加载
此处需要注意的是,光配置立即加载是不生效的,还要配置客户端列表,配置如下,详细配置请参考官方说明:
ribbon:
eager-load:
enabled: true
clients: distribution, material-product, outer-data #需要调用的微服务名称
原创文章,作者:端木书台,如若转载,请注明出处:https://blog.ytso.com/243867.html