网站首页 > 技术文章 正文
上文给大家介绍的内容是微服务网关:Zuul Filter扩展功能实现,相信大家应该都已经理解贯通并且吸收了,那么本篇文章我们将学习微服务网关:Zuul源码解析的内容,大家要认真学了。
Zuul源码解析
从源码分层的角度,Spring Cloud Zuul可以分为两个部分:
Zuul-Core模块(ZuulServlet、FilterProcessor、ZuulFilter等)提供Zuul核心工作运行机制及对应的HTTP处理逻辑;spring-cloudnetflix-core(ZuulHandlerMapping、ZuulController等)是Spring部分的处理模块,负责把Zuul接入Spring Cloud体系。
Zuul的源码分析
Zuul应用开始于@EnableZuulProxy或@EnableZuulServer注解,所以一个不可缺少的步骤就是在启动程序中加入@EnableZuulProxy,代码如下:
其中,Zuul的自动化加载配置主要自动化加载如下两个配置类:
ZuulProxyMarkerConfiguration是一个标签类,通过自动配置类条件判断@ConditionalOnBean ( ZuulServerMarkerConfiguration.Marker.class)使Zuul的自动化配置加载类生效,代码如下:
ZuulProxyAutoConfiguration类完成Zuul自动装配功能,代码如下:
● Zuul中属性相关源码
● 重要Bean说明
○ ZuulController:接管所有的HTTP请求,将所有请求转交给ZuulServlet去处理。
○ ZuulRefreshListener:通过监听Spring Context发布机制事件,监听心跳消息。
○ CompositeRouteLocator:复合路由定位器,主要集成所有的路由定位器(如配置文件路由定位器、服务发现定位器、自定义路由定位器等)来定位路由。
○ SimpleRouteLocator:主要加载配置文件的路由规则。
○ RefreshableRouteLocator:路由刷新接口,实现此接口的路由定位器才能被刷新。
○ ZuulHandlerMapping : 它 将 路 由 规 则 绑 定 到ZuulController上面。
● Zuul中默认Filter实现加载类
○ ServletDetectionFilter:它的作用是判断请求的来源,可以判断请求来自dispatcherServlet还是zuulServlet,并将判断结果存放到RequestContext中。
○ Servlet30WrapperFilter:它将原始请求进行包装,将原始的HttpServletRequest请求包装成Servlet30RequestWrapper类型。
○ FormBodyWrapperFilter:作用同Servlet30WrapperFilter一样,也是对请求的一个包装。
○ DebugFilter:用于动态开启Debug日志。
○ PreDecorationFilter:为当前请求做一些预处理,比如,进行路由规则的匹配、在请求上下文中设置该请求的基本信息及路由匹配结果的一些设置信息等,这些信息将是后续过滤器进行处理的重要依据。
○ RibbonRoutingFilter:通过Ribbon和Hystrix来向服务实例发起请求。
○ SimpleHostRoutingFilter:主要用来转发ServiceId(即非 Eureka 后 端 服 务 ) 为 空 的 路 由 消 息 , 它 直 接 使 用HttpClient来转发请求。
● RoutesEndpoint
在引入Spring Boot Actuator时会新增一个routes端点,可以通过/routes查询具体的路由信息。
● 底层Web容器替换
spring-boot-starter-web模块默认使用Tomcat作为内嵌容器,如果我们想要切换为Jetty或者UnderTow,只需要添加相应容器的依赖即可。我们以Jetty举例,添加如下Maven依赖:
内嵌容器由EmbeddedServletContainerAutoConfiguration配置类决 定 : 当 类 路 径 下 有 Jetty 等 类 时 , 它 将 会 注 入JettyEmbeddedServletContainerFactory。内嵌容器的自动配置源码如下:
本文给大家讲解的内容是微服务网关:Zuul源码解析
- 下篇文章给大家讲解的内容是负载均衡:负载均衡机制
- 觉得文章不错的朋友可以转发此文关注小编;
- 感谢大家的支持!
- 上一篇: Zuul 路由网关
- 下一篇: springcloud-zuul微服务网关高可用的场景概述
猜你喜欢
- 2024-11-22 SpringCloud——zuul权限校验、接口限流
- 2024-11-22 Spring Cloud源码分析(四)Zuul:核心过滤器
- 2024-11-22 Spring Cloud Zuul 学习+实践
- 2024-11-22 SpringCloud网关及Zuul项目搭建,你确定你了解?
- 2024-11-22 springcloud-zuul微服务网关高可用的场景概述
- 2024-11-22 Zuul 路由网关
- 2024-11-22 SpringCloud微服务架构篇6:Zuul路由规则
- 2024-11-22 Spring Cloud Zuul的学习
- 2024-11-22 springcloud(十一):服务网关Zuul高级篇
- 2024-11-22 SpringCloud系列之Zuul网关和Zuul过滤器
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)