我的后端学习大纲
SpringCloud学习大纲
1.1.OpenFeign超时的情况:
- 在Spring Cloud微服务架构中,大部分公司都是利用OpenFeign进行服务间的调用,而比较简单的业务使用默认配置是不会有多大问题的,但是如果是业务比较复杂,服务要进行比较繁杂的业务计算,那后台很有可能会出现Read Timeout这个异常,因此定制化配置超时时间就有必要了
1.2.搭建超时场景:
- 1.服务提供方8001故意写暂停62秒钟程序
为什么写62秒?为什么写62秒?为什么写62秒?
OpenFeign默认等待60秒钟,超时后报错
- 2.服务调用方80写好捕捉超时异常:
@GetMapping("/feign/pay/get/{id}")
public ResultData getPayInfo(@PathVariable("id") Integer id){
System.out.println("-------支付微服务远程调用,按照id查询订单支付流水信息");
ResultData resultData = null;
try{
System.out.println("调用开始-----:"+DateUtil.now());
resultData = payFeignApi.getPayInfo(id);
} catch (Exception e) {
e.printStackTrace();
System.out.println("调用结束-----:"+DateUtil.now());
ResultData.fail(ReturnCodeEnum.RC500.getCode(),e.getMessage());
}
return resultData;
}
- 3.测试
- 4.结论:OpenFeign默认等待60秒钟,超时后报错
1.3、超时处理配置:
a.官网介绍两个参数:
- 1.默认OpenFeign客户端等待60秒钟,但是服务端处理超过规定时间会导致Feign客户端返回报错。为了避免这样的情况,有时候我们需要设置Feign客户端的超时控制,默认60秒太长或者业务时间太短都不好
- 2.yml文件中开启配置:
connectTimeout
:连接超时时间readTimeout
:请求处理超时时间
b.官网要求的超时配置:
1.4.超时配置实战:
a.全局配置
- 1.全部配置:
server:
port: 80
spring:
application:
name: cloud-consumer-openfeign-order
cloud:
consul:
host: localhost
port: 8500
discovery:
prefer-ip-address: true #优先使用服务ip进行注册
service-name: ${spring.application.name}
openfeign:
client:
config:
default:
#连接超时时间
connectTimeout: 3000
#读取超时时间
readTimeout: 3000
- 2.进行3秒测试:
b.指定配置:
- 1.指定单个服务配置超时时间举例
spring:
cloud:
openfeign:
client:
config:
# default 设置的全局超时时间,指定服务名称可以设置单个服务的超时时间
default:
#连接超时时间
connectTimeout: 4000
#读取超时时间
readTimeout: 4000
# 为serviceC这个服务单独配置超时时间,单个配置的超时时间将会覆盖全局配置
serviceC:
#连接超时时间
connectTimeout: 2000
#读取超时时间
readTimeout: 2000
- 2.本模块中配置超时时间的关键内容
spring:
cloud:
openfeign:
client:
config:
cloud-payment-service:
#连接超时时间
connectTimeout: 5000
#读取超时时间
readTimeout: 5000
- 3.全部的yml文件内容:
server:
port: 80
spring:
application:
name: cloud-consumer-openfeign-order
####Spring Cloud Consul for Service Discovery
cloud:
consul:
host: localhost
port: 8500
discovery:
prefer-ip-address: true #优先使用服务ip进行注册
service-name: ${spring.application.name}
openfeign:
client:
config:
#default:
#connectTimeout: 4000 #连接超时时间
#readTimeout: 4000 #读取超时时间
cloud-payment-service:
connectTimeout: 8000 #连接超时时间
readTimeout: 8000 #读取超时时间
单独实现某个模块超时限制和全局设置全部模块超时限制共存的时候,单独模块这个粒度更细,是优先生效的!
- 4.进行5秒测试: