核心流程
在看Zuul的原理之前,要先熟透Ribbon和Hystrix的原理,因为Zuul就是基于这2个组件来做的。
画个图概括下:
HystrixCommand会将任务丢到异步线程池里去执行,通过Future获取执行完毕的结果。
1 | // HystrixCommand.java |
queue()方法,是用来异步执行的command逻辑的,他会将command扔到线程池里去执行,但是这个方法不会等待线程执行完毕command,他会拿到一个Future对象,通过Future对象去获取command执行完毕的响应结果。
在zuul网关中,有关于配置连接数量的配置:
1 | zuul: |
这个是只是的zuul调用静态路由配置的Http连接池数量,按照实际情况设置就好(请注意不要和Tomcat的maxConnections搞混了)。
这个配置并不会对基于Ribbon的下游服务访问生效,如果要配置Ribbon相关的配置,需要配置以下的配置:
1 | ribbon: |
在@FeignClient中增加fallback配置,指定降级方法的执行
1 | @FeignClient(name = "user",url = "${user.url}",fallback = UserFeignFallback.class |
在开始之前,先说一下FeignClient接口的上的SpringMVC注解是如何被解析的,回顾到之前生成动态代理的时候,有个nameToHandler的map,有一句非常关键的代码。
1 | Map<String, MethodHandler> nameToHandler = targetToHandlersByName.apply(target); |
这里面就完成了SpringMVCContract对方法的解析
1 | // ReflectiveFeign.java |
Feign负责简化接口调用,发起Http请求,Feign也包含了几个核心组件