zuul.core解析
这里以zuul1.2.3为例子(1.x最后一个版本)
IZuulFilter
zuul的核心实现,主要是filter
函数 | 功能 |
---|---|
boolean shouldFilter(); |
用于判断是否需要执行该filter |
Object run(); |
执行filter的处理逻辑 |
ZuulFilter
IZuulFilter
的抽象实现,主要函数有以下几个:
函数 | 功能 |
---|---|
String filterType() |
返回filter的类型,可以为pre (在route之前执行)、post (在route之后执行)、route 、error (出错时执行)中的一个 |
int filterOrder() |
用于对filter进行排序,值越小,越早执行 |
ZuulFilterResult runFilter() |
判断shouldFilter 返回true时,执行filter逻辑 |
ZuulRunner
该类负责生成一个RequestContext
,并执行调用filter
主要函数有几下几个:
函数 | 功能 |
---|---|
void preRoute() |
调用所有类型这pre 的filter的runFilter 函数 |
void route() |
调用所有类型这route 的filter的runFilter 函数 |
void postRoute() |
调用所有类型这post 的filter的runFilter 函数 |
void error() |
调用所有类型这error 的filter的runFilter 函数 |
FilterRegistry
用于注册filter,调用FilterRegistry.instance()
返回实例对象
基中主要用到的是void put(String key, ZuulFilter filter)
函数,用于添加过滤器
RequestContext
上下文件信息,该类用于保存请求的一些状态数据,本质上是一个ConcurrentHashMap<String, Object>
,内部使用了ThreadLocal
来处理不同请求的并发问题,调用RequestContext.getCurrentContext()
获取当前的上下行
ZuulServlet
servlet的实现,在集成到spring中使用时,会通过spring的ServletWrappingController
,对该servlet进行包装
在ZuulServlet
调用了ZuulRunner
来执行filter
总结
zuul.core整体比较简单,通过以上几个核心的类,基本可以说明工作方式
用来和spring进行集成的spring-cloud-netflix-zuul
,以后再整理