一、原因

我们在使用Spring Cloud的Ribbon或Feign来实现服务调用的时候,第一次请求经常会经常发生超时报错,而之后的调用就没有问题了。造成第一次服务调用出现失败的原因主要是Ribbon进行客户端负载均衡的Client并不是在服务启动的时候就初始化好的,而是在调用的时候才会去创建相应的Client,所以第一次调用的耗时不仅仅包含发送HTTP请求的时间,还包含了创建RibbonClient的时间,这样一来如果创建时间速度较慢,同时设置的超时时间又比较短的话,很容易就会出现上面所描述的显现。

二、Ribbon timeout默认值

RibbonClientConfiguration 类中,Ribbon的默认timeout时间默认设置为1秒

public class RibbonClientConfiguration {
public static final int DEFAULT_CONNECT_TIMEOUT = 1000;
public static final int DEFAULT_READ_TIMEOUT = 1000;
public static final boolean DEFAULT_GZIP_PAYLOAD = true;
@RibbonClientName
private String name = "client";
@Autowired
private PropertiesFactory propertiesFactory; public RibbonClientConfiguration() {
}
}

DEFAULT_READ_TIMEOUT默认设置为1秒,如果第一次请求响应时间超过了1秒,就会产生超时错误,我们可以在application.yml文件中做如下设置:

#建议3-5秒
ribbon:
ReadTimeout: 5000
ConnectTimeout: 5000
#Ribbon的饥饿加载(eager-load)模式
eager-load:
#开启Ribbon的饥饿加载模式
enabled: true
#指定需要饥饿加载的客户端名称、服务名
clients: spring-application-name服务名称

Eclipse或者Intellij IDEA里,这两个timeout时间属性是不会有提示的,这个很正常。不是所有的属性,IDE都能正常提示的,不过没关系,不影响使用的。只要你配置了,Ribbon就好按照你配置的来。

三、feign请求超时问题 (断点调试经常遇到 )

解决办法如下:

开启hystrix,配置hystrix的超时时间

#feign客户端启动hystrix断路保护
feign:
hystrix:
enabled: true
hystrix:
command:
default:
execution:
isolation:
thread:
#断路器超时时间 默认1秒,首次访问时间比较长,容易造成访问超时的问题,这边设置成5秒以解决该问题
timeoutInMilliseconds: 60000

 

最新文章

  1. HDU1269 迷宫城堡
  2. Unsupported major.minor version 51.0解决
  3. 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性
  4. 4.python函数基础
  5. copy,retain,assign,strong,weak的区别
  6. windows下搭建NFS服务器
  7. linux中grep使用方法具体解释
  8. Linq 内联左联等
  9. TOMCAT-publishing to tomcat v7.0 server at
  10. asp.net 程序,当发生找不到文件的错误时,如何正确定位是哪个文件?
  11. Asp.Net Boilerplate Project (ABP) 视频教程
  12. Linux硬盘文件分析取证(SSH过的IP)
  13. JavaScript 环境和作用域
  14. 【EF6学习笔记】(四)弹性连接及命令拦截调试
  15. [JOISC2014]バス通学
  16. poj3009 Curling 2.0(很好的题 DFS)
  17. 微信小程序记账本进度二
  18. 微信小程序-01-项目组成文件介绍(入门篇)
  19. 美团点评基于 Flink 的实时数仓建设实践
  20. AR中的SLAM(一)

热门文章

  1. 单网口RFC2544测试——信而泰网络测试仪实操
  2. RFC2889MAC地址学习速率——网络测试仪实操
  3. 分享几个你可能不知道的交互式Git 命令
  4. kibana操作记录
  5. linux中at命令详解
  6. Jmeter混合场景压力测试
  7. CSAPP-Lab04 Architecture Lab 深入解析
  8. JavaWeb之Servlet、拦截器、监听器及编程思想
  9. 前面顺序表的补充(复杂度,未实现的算法,空间扩展)(基于c语言)
  10. Mybatis——xml配置