Zuul简介
Zuul 是Netflix开源的一个API Gateway 服务器, 是 Spring Cloud Netflix 子项目的核心组件之一,可以作为微服务架构中的 API 网关使用,支持动态路由与过滤功能。
Zuul 本质上是一个Web servlet应用,为微服务架构中的服务提供了统一的访问入口。
Zuul它实现了请求路由、负载均衡、校验过滤、服务容错、服务聚合等功能。
Zuul工作原理
Zuul是通过Servlet来实现的,Zuul通过自定义的ZuulServlet,类似于Spring MVC的DispatcherServlet来对请求进行控制。
Zuul组件的核心就是是一系列的过滤器,这些过滤器可以完成如下的功能。
所以要搞清楚Zuul的工作原理,重点就是搞清楚Zull Filter都具体做了哪些事情,下面mikechen接着谈Zull Filter的作用于实现。
Zuul Filter
Zuul大部分功能都是通过Filter过滤器来实现的,Zuul中定义了四种标准过滤器类型,如下:
1.PRE
这种过滤器在请求被路由之前调用:可实现身份验证、记录调试信息等。
2.ROUTING
这种过滤器将请求路由到微服务:这种过滤器用于构建发送给微服务的请求。
3.POST
这种过滤器在路由到微服务以后执行:这种过滤器可用来为响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。
4.ERROR
在其他阶段发生错误时执行该过滤器,除了默认的过滤器类型,Zuul还允许我们创建自定义的过滤器类型。
每一种处理器具体细分多种,如下图所示:
需要记住3个常见的Route过滤器, 分别是:
- RibbonXXXFilter : 路由到服务;
- SimpleHostRoutingFilter : 路由到URL地址;
- SendForwardFilter : 转向Filter自己。
Zuul 生命周期
当一个请求进来时,会先进入 pre 过滤器,在 pre 过滤器执行完后,接着就到了 routing 过滤器中,开始路由到具体的服务中,错误的情况会被错误过滤器拦截。
Zuul 请求生命周期,如下图所示:
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》