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