欢迎来到我的博客小站。  交流请加我微信好友: studyjava。  也欢迎关注同名公众号:Java学习之道

SpringCloud(九):Zuul之Filter详解

  |   0 评论   |   0 浏览

Zuul 详解

官方文档https://github.com/Netflix/zuul/wiki/How-it-Works

Zuul 的中心是一系列过滤器,能够在 HTTP 请求和响应的路由过程中执行一系列操作。

以下是 Zuul 过滤器的主要特征:

  • 类型:通常在应用过滤器时在路由流程中定义阶段(尽管它可以是任何自定义字符串)
  • 执行顺序:在类型中应用,定义跨多个过滤器的执行顺序
  • 标准:执行过滤器所需的条件
  • 操作:满足条件时要执行的操作

Zuul 提供了一个动态读取,编译和运行这些过滤器的框架。过滤器不直接相互通信 - 而是通过 RequestContext 共享状态,RequestContext 对每个请求都是唯一的。

过滤器目前用 Groovy 编写,尽管 Zuul 支持任何基于 JVM 的语言。每个 Filter 的源代码都写入 Zuul 服务器上的一组指定目录,这些目录会定期轮询更改。更新的过滤器从磁盘读取,动态编译到正在运行的服务器中,并由 Zuul 为每个后续请求调用。

过滤类型

Zuul 大部分功能都是通过过滤器来实现的。Zuul 中定义了四种标准过滤器类型,这些过滤器类型对应于请求的典型生命周期:

  • PRE:这种过滤器在请求被路由调用之前调用。我们可利用这种过滤器实现身份验证、再集群中选择请求的微服务、记录调试信息等。
  • ROUTING:这种过滤器将请求路由到微服务。用于构建发送给微服务的请求,并使用 Apache HttpClientNetflix Ribbon 构建和发送原始 HTTP 请求的位置。
  • POST:请求在路由到微服务之后执行。示例包括向响应添加标准 HTTP 标头、收集统计信息和指标、以及将响应从源传输到客户端。
  • ERROR:过滤器在其中一个阶段发生错误时执行。

除了默认的过滤器类型,Zuul 还允许我们创建自定义过滤器类型。例如,我们有一个自定义 STATIC 类型的过滤器,它直接在 Zuul 中生成响应,而不是将请求转发到后端的微服务。

Zuul 请求的生命周期

Zuul 请求的生命周期如下图所示,改图详细的描述了各种类型的过滤器执行顺序。
Zuul 请求的生命周期图

常见的使用

/**
 * 过滤类型
 */
filterType() {
    return FilterConstants.PRE_TYPE;
}

/**
 * 过滤顺序
 */
public int filterOrder() {
    return -4;
}

/**
 * 拦截需要过滤的请求
 */
shouldFilter(){
    ……
}

/**
 * 过滤需要做的处理
 */
run(){
    ……
}

执行顺序

  • 1、按照filterType决定顺序

Pre 优先 Post执行,此时filterOrder没有作用。

  • 2、filterType相同

filterOrder有作用,数字越小,越先执行。(负数也是这个规则,0和-1的话,-1先执行)

  • 3、相同filterType,相同filterOrder,都执行,执行顺序不清楚。

prefilter先执行了,post后执行了。

感觉不像是按照过滤请名称排序的样子。


标题:SpringCloud(九):Zuul之Filter详解
作者:mmzsblog
地址:https://www.mmzsblog.cn/articles/2019/08/06/1565078123439.html
-----------------------------
如未加特殊说明,此网站文章均为原创。
转载须在文章起始位置标注作者及原文连接,否则保留追究法律责任的权利。

个人微信公众号 ↓↓↓                 

微信搜一搜 Java 学习之道