• Zuul网关总结


    Zuul是Netflix开源的网关服务(gateway service)(https://github.com/Netflix/zuul),提供动态路由、监控、弹性、安全性等功能。最近在公司的项目中用到了,总结如下,基于1.3.1版本。

    1.基本概念

    Zuul的核心是一系列的Filter,在路由HTTP request和reponse中执行一系列的操作。Zuul提供了框架可以动态的读取、编译、运行这些Filter。

    Filter继承类com.netflix.zuul.ZuulFilter,有以下的特征:

      Type,定义该Filter应用的阶段

      Execution Order,和Type联合起来使用,标识Filter在同一Type下的执行顺序,值越小优先级越高,可以为负数

      Criteria,决定改Filter是否执行

      Action,Filter具体要做的操作

    Filter Type有四种:

      PRE,标识Filter在路由到origin前执行

      ROUTING,该Filter处理到origin的request。在此处使用HttpClient或Ribbon请求origin

      POST,在request已经被路由到origin后执行。

      ERROR,在以上type中发生错误时执行。

    Zuul Request的请求生命周期图如下。

    2.运用

    在应用启动时需要设置Groovy的动态代码编译器,磁盘上Filter的目录,轮询时间。Groovy是运行在JVM的动态语言,可以和Java一起使用。Zuul中用于动态加载的Filter使用Groovy写的。

    自定义Filter并按type放在pre、route、post、error路径下,部署应用后,需要拷贝到zuul.filter.root定义的路径下。

    直接在Web项目中使用

    如果是Web项目集成的,可以参照官方例子(https://github.com/Netflix/zuul/tree/1.x/zuul-simple-webapp)及文档(https://github.com/Netflix/zuul/wiki/zuul-simple-webapp

    1.在web应用初始化时初始Filter相关配置。新建类继承ServletContextListener,并配置在web.xml中,在contextInitialized时回调初始化Filter

    //配置Groovy动态代码编译器,Filter路径,轮询时间等
    private
    void initGroovyFilterManager() { FilterLoader.getInstance().setCompiler(new GroovyCompiler()); String scriptRoot = System.getProperty("zuul.filter.root", ""); if (scriptRoot.length() > 0) scriptRoot = scriptRoot + File.separator; try { FilterFileManager.setFilenameFilter(new GroovyFileFilter()); FilterFileManager.init(5, scriptRoot + "pre", scriptRoot + "route", scriptRoot + "post"); } catch (Exception e) { throw new RuntimeException(e); } }

    2.在web.xml中添加servlet,配置的类是Zuul-core中的com.netflix.zuul.http.ZuulServlet,这个类是Zuul的核心类之一,处理了所有Filter相关的业务,使得我们只需要用Groovy编写Filter并放在之前设置的路径即可。

    3.在web.xml中添加filter,配置的类时com.netflix.zuul.context.ContextLifecycleFilter,用于在处理请求完毕后对RequestContext执行unset()。

    和Spring boot一起使用

    Spring boot为开发提供了很多的便利。如果是和Spring Boot一起使用Zuul,需要用maven引入spring-cloud-starter-netflix-zuul依赖库,会自动引入spring-cloud-netflix-zuul及zuul-core、zuul-netflix。在Spring boot主类上添加注解@EnableZuulProxy以启用Zuul。

    //配置Groovy动态代码编译器,Filter路径,轮询时间等
    @PostConstruct
    private void initGroovyFilterManager() {
            FilterLoader.getInstance().setCompiler(new GroovyCompiler());
    
            String scriptRoot = System.getProperty("zuul.filter.root", "");
            if (scriptRoot.length() > 0) scriptRoot = scriptRoot + File.separator;
            try {
                FilterFileManager.setFilenameFilter(new GroovyFileFilter());
                FilterFileManager.init(5, scriptRoot + "pre", scriptRoot + "route", scriptRoot + "post");
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }

    Spring cloud Netflix自己添加了很多Filter,以至于我们通用配置文件就可以配置路由信息,或者RouteLocator类型的实例名为routeLocator的bean。这些Spring Cloud自带的Filter用来处理、转发Request,Response。

    当网关应用本身也有Rest请求接口时是不会走这些Filter,这个处理是在org.springframework.web.servlet.DispatcherServlet这个核心类的getHandler()处理的。

  • 相关阅读:
    php单元测试
    git配置本地环境(phpstudy/tortoisegit/git等)
    xp/win7中系统安装memcached服务,卸载memcached服务,以及删除memcached服务
    memcached装、启动和卸载
    如何安装memcached
    三元运算符、逻辑运算符
    移动端页面怎么适配ios页面
    javascript正则表达式——元字符
    一个div添加多个背景图片
    GNU Screen使用入门
  • 原文地址:https://www.cnblogs.com/minguo/p/10690433.html
Copyright © 2020-2023  润新知