美文网首页
Zuul动态过滤器实现原理之Groovy

Zuul动态过滤器实现原理之Groovy

作者: 鸿雁长飞鱼龙潜跃 | 来源:发表于2019-08-08 09:32 被阅读0次

Zuul过滤器实现原理之Groovy

Zuul支持动态加载过滤器,并且这个功能是默认开启的。Zuul的这个功能是借助Groovy来实现的。

一,FilterFileManager

FilterFileManager是实现动态加载Zuul过滤器的入口。FilterFileManager会开启一个线程,定时扫描指定目录下的*.groovy文件。这个开启的线程的名字是:

GroovyFilterFileManagerPoller

这个定时任务扫描玩所有的文件以后,会调用FilterLoader的方法,把这些请求处理器注册到FilterRegistry的容器中。

FilterLoader.getInstance().putFilter(file);

二,GroovyCompile

在注册到FilterRegistry之前,首先会查询是否存在,不存在才会去注册。注册时首先会调用GroovyCompile.compile(file)方法加载请求处理器文件。

具体的实现源码可以参考:

GroovyCompile.compile()

三,如何指定groovy文件的路径

目前来看,Spring Cloud并没有提供这样的一个配置项,使得我们可以在配置文件中配置groovy文件的路径。

那么我们就只能通过硬编码的方式来指定加载路径了,这一点感觉有点坑,不知后续的版本会不会优化。

如何指定加载路径呢?

答案就是初始化FilterFileManager的时候来指定。

FilterFileManager.init()方法主持传入加载路径。

源码如下:

// 定于静态全局变量 单例模式初始化FilterFileManager

static FilterFileManager INSTANCE;

下面看init方法的实现:

if(INSTANCE = null){

    INSTANCE = new FilterFileManager();

}

// 这个字段就是groovy文件存放路径,初始化调用init时传入,支持传入多个路径

INSTANCE.aDirectories = directories;

// 加载groovy文件的定时任务的执行间隔

INSTANCE.pollingIntervalSeconds = pollingIntervalSeconds

// 加载groovy文件的具体逻辑

INSTANCE.manageFiles();

// 开启线程

INSTANCE.startPoller();

最后,需要区分两个概念:Zuul动态路由和Zuul动态加载过滤器文件。这2个概念不要混淆了,Zuul动态路由没有借助groovy来实现,而Zuul动态加载过滤器文件是借助groovy来实现的。

相关文章

网友评论

      本文标题:Zuul动态过滤器实现原理之Groovy

      本文链接:https://www.haomeiwen.com/subject/bfjtjctx.html