问题
因为数据量过大,公司项目访问外部接口一直报标题所示的超时问题,各种百度过后,基本都是hystrix和ribbon的锅。
解决方法
尝试更改hystrix和ribbon的超时时间为600000毫秒(十分钟):
ribbon:
ReadTimeout: 600000 # 处理时间
ConnectTimeout: 600000 # 连接时间
MaxAutoRetries: 0 #最大自动重试次数
MaxAutoRetriesNextServer: 1 # 换实例重试次数
MaxTotalHttpConnections: 2000 # 最大http连接数,越大越好,但到到达一个临界点之后,就不会提高响应速度了
MaxConnectionsPerHost: 1000 # 每个host连接数
okhttp:
enabled: true
hystrix:
threadpool:
default:
coreSize: 20
maximumSize: 50
maxQueueSize: -1
allowMaximumSizeToDivergeFromCoreSize: true
command:
alpha-routeservice:
execution:
timeout:
enabled: true
isolation:
strategy: THREAD
thread:
interruptOnTimeout: false
timeoutInMilliseconds: 600000
default:
execution:
timeout:
enabled: true
isolation:
strategy: THREAD
thread:
interruptOnTimeout: false
timeoutInMilliseconds: 600000
更改后重新调试接口,问题依然存在,多次尝试后,才发现问题可能并不是ribbon上。因为负责调用的框架是feign,所以最终尝试修改feign的超时时间:
feign:
okhttp:
enabled: true
client:
config:
default:
connect-timeout: 600000
read-timeout: 600000
OK,问题完美解决。