前言
讲解这个之前,我们先来想一个场景,home是我们的首页微服务,sku是我们的商品微服务,我们的首页调用商品,对于用户来说最佳的时间就是500ms左右,假设接口层面,我们没有做任何的超时控制,如果sku一直处于不返回数据的异常情况,那么首页一直在等待,就会造成一直白屏,最佳的是要有降级的。降级后续讲hystrix会给大家提到。
扩展一个场景题
如果A服务调用B服务,B服务日常的tp99是500ms,这个时候,A的超时时间应该设置为多少?(100,200,800,1000)。800是正常的,我们不要小于b提供的时间,也不要大的离谱,
再继续扩展一个问题,如果在高并发的情况下,我们是否要做重试。其实是不要做的,我们应该快速失败,因为在高并发的情况下,如果不断重试,会导致服务产生问题。
代码实践
sku微服务调整
我们在原有的sku服务里面增加一个方法。
@GetMapping("timeOut")
public String timeOut() throws InterruptedException {
Thread.sleep(3000L);
return "hello Sku world time Out";
}
home微服务调整
在原有的feign接口里增加一个超时接口。
@GetMapping("timeOut")
public String timeOut();
原有的controller里面增加调用测试。
@GetMapping("TestTimeOut")
public String TestTimeOut() {
return skuFeignService.timeOut();
}
发现等了3秒之后,返回了结果。
设置超时时间--配置文件配置
feign:
client:
config:
default: #配置的所有东西默认生效,也可以换成指定微服务名称,只有该微服务生效
read-timeout: 2000 #响应超时时间
connect-timeout: 2000 #连接超时时间
# ape-cloud-sku:
# read-timeout: 2000
# connect-timeout: 2000
OpenFeign默认超时时间为10s
如果我们想针对不同的设置不同的时间,我们就可以把default进行替换为服务的名称。