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

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来实现的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值