4.调用关系及超时说明
分类:
文章
•
2022-10-02 11:36:04
- 调用关系图类似如下:
- User发起http请求,这里省略了controller的一层,只为表明RestTemplate的调用过程
- Hystrix采用aop拦截的方式,对标注HystrixCommand的方法进行拦截
- RestTemplate执行内部的拦截链,但是此拦截并非aop,只是普通的java连接链,类似于ServletFilter
- Ribbon执行负载均衡,选择合适的server(包含ip+port)关键信息
- 5~6调用返回
- RestTemplate委托http客户端发起真正的http请求
- http客户端发起真正的http请求
- 9~12调用返回
- 超时说明
上面的调用过程中有三个超时设置,分别是hystrix超时,RestTemplate超时和ribbon的超时(其实为http客户端超时)
那么这三个超时设为多少:
- 首先hystrix为最外部超时,其有多重熔断触发机制,代码异常,线程池/信号量跑满等。理论上hystrix超时应该在满足业务容忍度上取最大时间,timeout >= retry * (conntimeout+readtimeout):
如果设置的比RestTemplate+ribbon的小,当其余两个响应慢时,均会被hystrix中断;
如果设置的比RestTemplate+ribbon的大,那么hystrix永远不会触发超时中断降级,只可能方法抛出异常(超时等)进行降级;
- 其次RestTemplate超时本质为http客户端远程调用超时设置,这个设置为最大容忍远程服务的响应时间即可。
- 最后ribbon超时与RestTemplate超时类似,都是http客户端的超时,只不过,ribbon的超时配置在使用feign时才有效。