Zuul的概念
Zuul作为SpringCoud系列的API网关,在一个微服务集群中,Zuul担任的角色既是关口,有一夫当关,万夫莫开的气势,同时也是代理门户。作为关口,它是集群中提供的唯一的外部访问的通道,任何请求,必须通过网关,才能访问集群内部的服务。在访问Zuul时,可以对其进行安全认证、限流熔断等操作,请求处理完毕时,能够完成日志监控等服务。
Zuul请求生命周期
Zuul提供了一个框架,可以对过滤器进行动态的加载,编译,运行。过滤器直接按没有直接通信,他们通过一个RequestContext的静态类来进行数据传递的。RequestContext类中有ThreadLocal变量来记录每个Request所需要传递的数据。
一个请求到达网关后的过程:
1、通过所有的前置(pre)过滤器;
2、通过所有的路由(route)过滤器;
3、通过所有的后置(post)过滤器;
4、如果在过程中发生异常,则跳转到所有的错误(error)过滤器中。如上图所示。
标准过滤器类型:
1、PRE:在请求中被路由到源服务器前要执行的过滤器,主要可以用来做认证、请求转发、增加请求参数等。
2、ROUTE:处理将请求发送到源服务器的过滤器
3、POST:在响应从源服务器返回时要被执行的过滤器,可以对响应增加HTTP头,收集统计和度量,将响应以流的方式发送客户端等。
4、ERROR:在上述阶段中出现错误要执行的过滤器。
Zuul架构:
绿色:过滤器管理模块
粉色:过滤器加载模块
蓝色:核心过滤器运行时模块
从架构上可以看出,Zuul是一些列过滤器在运行,从而起到鉴权、路由、日志统计、限流等功能。