zuul.core解析

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之后执行)、routeerror(出错时执行)中的一个
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,以后再整理

posted @ 2024-04-25 14:52  qmcode  阅读(1)  评论(0编辑  收藏  举报