美文网首页
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