Spring Cloud Zuul 是 Spring Cloud Netflix 子项目的核心组件之一,可以作为微服务架构中的 API 网关使用,支持动态路由与过滤功能
API 网关为微服务架构中的服务提供了统一的访问入口,客户端通过 API 网关访问相关服务。
API 网关的定义类似于设计模式中的门面模式,它相当于整个微服务架构中的门面,所有客户端的访问都通过它来进行路由及过滤。
它实现了请求路由、负载均衡、校验过滤、服务容错、服务聚合等功能。
路由与过滤是Zuul的两大核心功能,
路由功能负责将外部请求转发到具体的服务实例上去,是实现统一访问入口的基础,
过滤功能负责对请求过程进行额外的处理,是请求校验过滤及服务聚合的基础。
Zuul中有以下几种典型的过滤器类型。
pre:在请求被路由到目标服务前执行,比如权限校验、打印日志等功能;
routing:在请求被路由到目标服务时执行,这是使用Apache HttpClient或Netflix Ribbon构建和发送原始HTTP请求的地方;
post:在请求被路由到目标服务后执行,比如给目标服务的响应添加头信息,收集统计数据等功能;
error:请求在其他阶段发生错误时执行。
由于Zuul自动集成了Ribbon和Hystrix,所以Zuul天生就有负载均衡和服务容错能力,我们可以通过Ribbon和Hystrix的配置来配置Zuul中的相应功能。