一、筛选器概述
Zuul的中心是一系列过滤器,这些过滤器能够在HTTP请求和响应的路由期间执行一系列操作。
以下是Zuul过滤器的主要特征:
- 类型:通常定义路由流程中应用过滤器的阶段(尽管它可以是任何自定义字符串)
- 执行顺序:在类型中应用,定义多个过滤器的执行顺序
- 条件:执行过滤器所需的条件
- 动作:如果符合条件,将执行的动作
Zuul提供了一个框架来动态读取,编译和运行这些过滤器。过滤器不直接相互通信-而是通过每个请求唯一的RequestContext共享状态。
过滤器当前以Groovy编写,尽管Zuul支持任何基于JVM的语言。每个筛选器的源代码都写入Zuul服务器上的一组指定目录,并定期轮询这些目录以查找更改。从磁盘读取更新的筛选器,将其动态编译到正在运行的服务器中,并由Zuul为每个后续请求调用。
二、筛选器类型
有几种标准过滤器类型对应于请求的典型生命周期:
- PRE 过滤器在路由到原点之前执行。示例包括请求身份验证,选择原始服务器以及记录调试信息。
- ROUTING 过滤器处理将请求路由到源。这是使用Apache HttpClient或Netflix Ribbon构建和发送原始HTTP请求的地方。
- POST 过滤器在将请求路由到源之后执行。示例包括将标准HTTP标头添加到响应,收集统计信息和指标以及将响应从源流传输到客户端。
- ERROR 在其他阶段之一发生错误时,将执行过滤器。
除了默认的过滤器流程外,Zuul还允许我们创建自定义过滤器类型并明确执行它们。例如,我们有一个自定义STATIC类型,它在Zuul中生成响应,而不是将请求转发到源。为此,我们有一些用例,其中一个是内部端点,其中包含有关特定Zuul实例的调试数据。