标签:tin 结果 错误 一个 修改 execution 字符 proc contex


ZuulServlet类似SpringMvc的DispatcherServlet,所有的Request都要经过ZuulServlet的处理,因此ZuulServlet是zuul框架源码分析的入口点。
zuul逻辑的入口是ZuulServlet.service(ServletRequest servletRequest, ServletResponse servletResponse)。

RequestContext提供了执行filter Pipeline所需要的Context,因为Servlet是单例多线程,这就要求RequestContext即要线程安全又要Request安全。
context使用ThreadLocal保存,这样每个worker线程都有一个与其绑定的RequestContext,因为worker仅能同时处理一个Request,这就保证了Request Context 即是线程安全的由是Request安全的。
三个核心的方法preRoute(),route(), postRoute(),zuul对request处理逻辑都在这三个方法里,ZuulServlet交给ZuulRunner去执行。
由于ZuulServlet是单例,因此ZuulRunner也仅有一个实例。
ZuulRunner直接将执行逻辑交由FilterProcessor处理,FilterProcessor也是单例,其功能就是依据filterType执行filter的处理逻辑:


FilterProcessor对filter的处理逻辑。
List<ZuulFilter> list。processZuulFilter(ZuulFilter filter)RequestContext对每个filter的执行状况进行记录,应该留意,此处的执行状态主要包括其执行时间、以及执行成功或者失败,如果执行失败则对异常封装后抛出。 
Type:定义filter的类别,用字符串表示,有四种标准类别,代表了Request的生命周期。filterType()返回值代表该filter的Type。
Execution Order: 同一个Type的filters组成Pipeline,Execution Order决定他们执行的顺序。filterOrder()返回值是该filter的Execution Order。
shouldFilter()run()。
zuul框架主要的功能就是动态的读取\编译\运行这些filter。filter之间之间通过RequestContext共享状态信息,
既然filter都是对特定Request的处理,那么RequestContext就是Request的Context,RequestContext用来管理 Request的Context,不受其它Request的影响。
Filter源码文件放在zuul 服务特定的目录, zuul server会定期扫描目录下的文件的变化。
如果有Filter文件更新,源文件会被动态的读取,编译加载进入服务,接下来的Request处理就由这些新加入的filter处理。
标签:tin 结果 错误 一个 修改 execution 字符 proc contex
原文地址:http://www.cnblogs.com/lexiaofei/p/7097928.html