Zuul 是 Netflix 开源的一个网关组件 API Gateway 服务器,在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。
Zuul 是 Netflix 开源的一个网关组件 API Gateway 服务器,本质上是一个 web servlet 应用。
Zuul 在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。
zuul 的例子可以参考 netflix 在 github 上的 simple webapp,可以按照 netflix 在 github wiki 上文档说明来进行使用。
1、过滤器机制
zuul 的核心是一系列的 filters, 其作用可以类比 Servlet 框架的 Filter,或者 AOP。
zuul 把 Request route 到 用户处理逻辑 的过程中,这些 filter 参与一些过滤处理,比如 Authentication,Load Shedding 等。
Zuul 提供了一个框架,可以对过滤器进行动态的加载,编译,运行。
Zuul 的过滤器之间没有直接的相互通信,他们之间通过一个 RequestContext 的静态类来进行数据传递的。RequestContext 类中有 ThreadLocal 变量来记录每个 Request 所需要传递的数据。
Zuul 的过滤器是由 Groovy 写成,这些过滤器文件被放在 Zuul Server 上的特定目录下面,Zuul 会定期轮询这些目录,修改过的过滤器会动态的加载到 Zuul Server 中以便过滤请求使用。
下面有几种标准的过滤器类型:
Zuul 大部分功能都是通过过滤器来实现的。Zuul 中定义了四种标准过滤器类型,这些过滤器类型对应于请求的典型生命周期。
(1) PRE:这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。
(2) ROUTING:这种过滤器将请求路由到微服务。这种过滤器用于构建发送给微服务的请求,并使用 Apache HttpClient 或 Netfilx Ribbon 请求微服务。
(3) POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的 HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。
(4) ERROR:在其他阶段发生错误时执行该过滤器。
内置的特殊过滤器
zuul 还提供了一类特殊的过滤器,分别为:StaticResponseFilter 和 SurgicalDebugFilter
StaticResponseFilter:StaticResponseFilter 允许从 Zuul 本身生成响应,而不是将请求转发到源。
SurgicalDebugFilter:SurgicalDebugFilter 允许将特定请求路由到分隔的调试集群或主机。
自定义的过滤器
除了默认的过滤器类型,Zuul 还允许我们创建自定义的过滤器类型。
例如,我们可以定制一种 STATIC 类型的过滤器,直接在 Zuul 中生成响应,而不将请求转发到后端的微服务。