Spring Cloud中,如何解决Feign/Ribbon第一次请求失败的问题,ribbon Read timed out
一、问题原因Gateway ribbon 超时时间设置ribbon:#Ribbon允许最大连接数,即所有后端微服务实例请求并发数之和的最大值。MaxTotalConnections: 500#单个后端微服务实例能接收的最大请求并发数MaxConnectionsPerHost: 500ReadTimeout: 2000ConnectTimeou...
·
一、问题原因
Gateway ribbon 超时时间设置
ribbon:
#Ribbon允许最大连接数,即所有后端微服务实例请求并发数之和的最大值。
MaxTotalConnections: 500
#单个后端微服务实例能接收的最大请求并发数
MaxConnectionsPerHost: 500
ReadTimeout: 2000
ConnectTimeout: 2000
# 关闭Ribbon的重试机制
MaxAutoRetriesNextServer: 0 #慎用
hystrix:
threadpool:
default:
coreSize: 20 #并发执行的最大线程数,默认10
maxQueueSize: 500 #BlockingQueue的最大队列数,默认值-1
queueSizeRejectionThreshold: 500 #即使maxQueueSize没有达到,达到queueSizeRejectionThreshold该值后,请求也会被拒绝,默认值5
command:
default:
execution:
timeout:
#如果enabled设置为false,则请求超时交给ribbon控制
enabled: false
此时调用auth模块验证token,auth模块调用customer模块查询用户,此时设置ribbon read时间也是2秒
ReadTimeout: 2000
调用接口出现问题,2.647秒超过了2秒
poc-auth-service.post /auth/checktoken: 2.647s
Key Value
error Read timed out
二、解决方法
因为首次系统加载需要额外时间,第一次时间会比较久,尽量设置折中的时间。
Gateway超时时间设置长些 ,解决问题
ReadTimeout: 4000
网上说,加上以下ribbon初始化,会减少消耗时间,但是我测了没效果
#从Dalston开始,Ribbon支持配置eager load实现在启动时就初始化Ribbon相关类。
eager-load:
enabled: true
clients: client1, client2, client3
更多推荐
已为社区贡献2条内容
所有评论(0)