SpringCloud源码剖析-Zuul的核心Filter

简介: zuul的执行流程Zuul是服务网关,是微服务的访问入口和出口,它的核心工作思想是:根据客户端的请求URL,通过路由映射到相应的微服务,然后通过服务发现的方式结合Ribbon实现对下游微服务的负载均衡 。Zuul通过大量的Filters实现上述功能,在zuul底层通过ZuulServlet定义整个请求的流程,请求会调用经过pre前置过滤器,route路由过滤器,post后置过滤器,然后返回响应结果,下面是一张摘抄于SpringCloud官网的zuul的生命周期图

zuul的执行流程

Zuul是服务网关,是微服务的访问入口和出口,它的核心工作思想是:根据客户端的请求URL,通过路由映射到相应的微服务,然后通过服务发现的方式结合Ribbon实现对下游微服务的负载均衡 。Zuul通过大量的Filters实现上述功能,在zuul底层通过ZuulServlet定义整个请求的流程,请求会调用经过pre前置过滤器,route路由过滤器,post后置过滤器,然后返回响应结果,下面是一张摘抄于SpringCloud官网的zuul的生命周期图

这张图的大致流程为:

  • 当客户端请求过来首先会到 “pre” 前置过滤器,前置过滤器会根据URL决定执行哪个Routing 路由过滤器
  • 请求到达”routing” 路由过滤器,路由过滤器会选择一个微服务去执行,底层使用了Ribbon进行负载均衡
  • 请求到达某个微服务,执行完成后又会回到“routing”路由过滤器,然后执行“post”后置过滤器,请求结束
  • 如果过滤器在执行的过程中报错,则会执行“error”过滤器,然后执行“post”过滤器,最后返回结果
  • 如果是“post”过滤器执行出错,然后执行“error”过滤器,但是不会再回到“post”过滤器,而是最返回结果

Zuul的核心Filters

下面是zuul的默认filters ,位于 spring-cloud-netflix-core.jar的 zuul.filters包中,它们的执行顺序在FilterConstants类:

类型 过滤器 描述 顺序
pre ServletDetectionFilter 在pre过滤器中,ServletDetectionFilter是第一个执行的过滤器,检测请求是用 DispatcherServlet还是 ZuulServlet,将结果设置到RequestContext中 -3
pre Servlet30WrapperFilter 主要是将原始请求进行包装,将原始的HttpServletRequest请求包装成Servlet30RequestWrapper类型 -2
pre FormBodyWrapperFilter 同Servlet30RequestWrapper一样,也是对请求的一个包装,只不过他只包装表单数据,即:content-type中必须带有“application/x-www-form-urlencoded”或“multipart/form-data” -1
error SendErrorFilter 这个是用来发送错误的Filter 0
pre DebugFilter 设置请求过程是否开启debug,将当前请求上下文中的debugRoutingdebugRequest参数设置为true 1
pre PreDecorationFilter 基本的路由转发配置,根据uri调用哪一个route过滤器 5
route RibbonRoutingFilter 服务路由的过滤器,使用用Ribbon 做负载均衡,hystrix做熔断 10
route SimpleHostRoutingFilter 简单主机路由过滤器,如果使用url路由,则用这个过滤器 100
route SendForwardFilter 它使用RequestDispatcher转发请求 500
post SendResponseFilter SendResponseFilter是Zuul的最后一个Filter,负责最终响应结果的输出。 1000

文章结束,这一章作为铺垫,我们将在后面章节从源码的角度详细介绍Zuul的核心配置和执行流程

目录
相关文章
|
2月前
|
Java 应用服务中间件 Nacos
Spring Cloud 常用各个组件详解及实现原理(附加源码+实现逻辑图)
Spring Cloud 常用各个组件详解及实现原理(附加源码+实现逻辑图)
69 0
|
6天前
|
Java API 开发工具
Spring Boot与Spring Cloud Config的集成
Spring Boot与Spring Cloud Config的集成
|
19天前
|
Java API 数据格式
Spring三兄弟:Spring、Spring Boot、Spring Cloud的100个常用注解大盘点
Spring三兄弟:Spring、Spring Boot、Spring Cloud的100个常用注解大盘点
|
13天前
|
Java API 网络架构
Spring Boot与Spring Cloud Gateway的集成
Spring Boot与Spring Cloud Gateway的集成
|
14天前
|
负载均衡 监控 Java
深入理解Spring Boot与Spring Cloud的整合方式
深入理解Spring Boot与Spring Cloud的整合方式
|
2月前
|
Java Nacos 开发者
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
|
2月前
|
人工智能 监控 安全
Java+Spring Cloud +Vue+UniApp微服务智慧工地云平台源码
视频监控系统、人员实名制与分账制管理系统、车辆管理系统、环境监测系统、大型设备监测(龙门吊、塔吊、升降机、卸料平台等)、用电监测系统、基坑监测系统、AI算法分析(安全帽佩戴、火焰识别、周界报警、人员聚众报警、升降机超载报警)、安全培训、设备监测。
48 4
|
2月前
|
人工智能 监控 安全
Springcloud数字化物联网智慧工地综合平台源码 劳务管理、设备管理、绿色施工
Springcloud数字化物联网智慧工地综合平台源码 劳务管理、设备管理、绿色施工
88 3
|
2月前
|
负载均衡 Java 开发者
【SpringCloud】什么是Spring Cloud----综述
【SpringCloud】什么是Spring Cloud----综述
28 0
|
2月前
|
Java Maven Nacos
Spring Cloud Eureka 服务注册和服务发现超详细(附加--源码实现案例--及实现逻辑图)
Spring Cloud Eureka 服务注册和服务发现超详细(附加--源码实现案例--及实现逻辑图)
47 0