当前位置: 首页 > news >正文

海南省住房公积金管理局app百度优化seo

海南省住房公积金管理局app,百度优化seo,四川省住房和城乡建设厅官网证件查询,wordpress七牛云教程Spring Cloud Zuul 底层是基于Servlet实现的,核心是通过一系列的ZuulFilter来完成请求的转发。 1、核心组件注册 1.1. EnableZuulProxy注解 启用Zuul作为微服务网关,需要在Application应用类加上EnableZuulProxy注解,而该注解核心是利用Im…

Spring Cloud Zuul 底层是基于Servlet实现的,核心是通过一系列的ZuulFilter来完成请求的转发。

1、核心组件注册

1.1. EnableZuulProxy注解

启用Zuul作为微服务网关,需要在Application应用类加上@EnableZuulProxy注解,而该注解核心是利用@Import注解往Spring容器导入了ZuulProxyConfiguration配置类
image.png

1.2. ZuulProxyConfiguration

ZuulProxyConfiguration继承了ZuulConfiguration。

1.2.1. ZuulConfiguration:

ZuulConfuguration主要是利用@Import往Spring容器注入了ServerPropertiesAutoConfiguration配置类(下一小节介绍),并且作为配置类往Spring容器注入了CompositeRouteLocator、SimpleRouteLocator、ZuulController、ZuulHandlerMapping、ZuulServlet等组件,基于Spring DispatcherServlet实现请求转发入口。
image.png
还有ServletDetectionFilter、Servlet30WrapperFilter、SendResponseFilter、SendErrorFilter、SendForwardFilter等pre、post类型的过滤器,是Zuul实现路由转发的核心过滤器。
image.png
还有ZuulRefreshListener监听器,同于监听应用内部事件,设置路由信息状态为dirty,实现动态更新。
image.png

1.2.2. ZuulProxyConfiguration

当然了,ZuulProxyConfiguration本身也注入了实现路由转发的核心过滤器,包含route类型的过滤器:RibbonRoutingFilter、SimpleHostRoutingFilter。
image.png
还有路由定位器DiscoveryClientRouteLocator,先调用父类SimpleRouteLocator获取配置文件中的路由配置,然后再从注册中心中补充路由信息。
image.png
还有一个非常重要的Listener:ZuulDiscoveryRefreshListener,它实现了ApplicationListener接口,主要监听InstanceRegisteredEvent、ParentHearbeatEvent和HeartbeatEvent,根据注册中心发送的事件来更新最新的路由信息(设置路由信息状态为dirty)。
image.png

2、路由配置注册

上面已经提到,Zuul是基于Servlet实现的,而根据请求URL找到对应Handler是利用HandlerMapping完成的,而Zuul也根据此实现了ZuulHandlerMapping实现类。

2.1. ZuulHandlerMapping

DispatcherServlet#initHandlerMappings
image.png

2.2. ZuulHandlerMapping#lookupHandler

在DispatcherServlet在首次请求分发时,就会遍历所有HandlerMapping,然后根据请求去获取对应的Handler(HandlerExecutionChain,包含Handler和拦截器),当遍历到ZuulHandlerMapping时,会调用lookupHandler方法,如果是首次调用,会触发上面的registerHandlers方法,进行路由配置注册。
image.png

2.3. ZuulHandlerMapping#registerHandlers

ZuulHandlerMapping首次根据url查找Handler时,会先找到所有的路由配置,然后遍历注册Handler(ZuulController);这里查找所有路由配置就是上面提到的DiscoveryClientRouteLocator。
image.png

3、请求处理

DispatcherServlet分发请求的流程:

图片拿自网络

image.png

3.1. ZuulController

在2.3.中,ZuulHandlerMapping给路由配置注册Handler时,对应的Handler是ZuulController。ZuulController继承了ServletWrappingController,底层是实现Controller接口。

3.2. SimpleControllerHandlerAdapter

根据上面流程图,找到HandlerMapping后,会继续找到能执行对应Handler的HandlerAdapter;而上面也提到,ZuulController是实现于Controller接口,所以最后定位到的是SimpleControllerHandlerAdapter。
image.png
SimpleControllerAdapter执行请求逻辑非常简单,就是执行Handler的handleRequest方法,即执行ZuulController的handleRequest方法。
image.png

3.3. ZuulController#handleRequest

ZuulController的handleRequest很简单,调用的是父类的handleRequestInternal方法。
但是我们需要注意ZuulController的构造函数,里面给servletClass、servletName和supportedMethods赋值了,其中servletClass尤为关键,因为后续处理就是调用此类实例的方法。
image.png

3.4. ServletWrappingController

ServletWrappingController重写了InitializingBean#afterPropertiesSet方法,在设置实例属性后,根据servletClass实例化了servletInstance对象,这里就是ZuulServlet的实例。
ServletWrappingController的handleRequestInternal方法也很简单,就是调用servletInstance的service方法,这里就是ZuulServlet#service方法。
image.png

3.5. ZuulServlet#service

ZuulServlet的service方法逻辑很简单,都是利用ZuulRunner来完成的;在ServletWrappingController实例化servletInstance时,同时调用了servletInstance的init方法,此时ZuulServlet同时会创建一个ZuulRunner实例。
service方法逻辑:

  1. 执行ZuulRunner#init方法,创建请求上下文RequestContext,并将利用HttpServletRequestWrapper和HttpServletResponseWrapper分别将HttpServletRequest和HttpServletResponse包装起来。
  2. 调用ZuulRunner#preRoute方法执行前置过滤器
  3. 调用ZuulRunner#route方法执行路由过滤器
  4. 调用ZuulRunner#postRoute方法执行后置过滤器
  5. 如果步骤2到步骤4出现错误,则执行ZuulRunner的error方法
  6. 最后,清理RequestContext内容(ThreadLocal)

image.png

3.6. ZuulRunner

ZuulRunner实现也是非常简单,底层是利用FilterProcessor来实现的。
image.png

3.7. FilterProcessor

FilterProcessor执行过滤器的逻辑也非常简单,就是根据过滤器类型找到所有的过滤器,然后遍历调用processZuulFilter方法执行,里面只要是执行ZuulFilter的runFilter方法,并且对错误信息和成功信息做统计。
image.png

3.8. FilterLoader和FilterRegistry

FilterProcessor中是利用FilterLoader来完成过滤器的加载的,而FilterLoader最终是利用FilterRegistry来完成过滤器的加载。
image.pngimage.png
FilterLoader和FilterRegistry都是单例,在ZuulFilterConfiguration中创建,并注入到ZuulFilterInitializer中,最后并将ZuulFilterInitializer注入到Spring容器中。
image.png
ZuulFilterInitializer实现了ServletContextListener接口,在Spring容器完成初始化时,会将ZuulFilter集合注入到FilterRregistry中。
image.png

4. 核心过滤器

这里只要分析核心过滤器,不包含所有的过滤器。

4.1. 前置过滤器

4.1.1. ServletDetectionFilter

执行顺序为-3,主要是区分请求是通过Spring的DispatcherServlet处理运行的还是ZuulServlet来处理运行的。
image.png

4.1.2. Servlet30WrapperFilter

执行顺序为-2,主要是将HttpServletRequest包装成Servlet30RequestWrapper。
image.png

4.1.3. FormBodyWrapperFilter

执行顺序为-1,条件要么是Context-Type为application/x-www-form-urlencoded的请求,要么是Context-Type为multipart/form-data,且是由String的DispatcherServlet处理的请求,主要是将HttpServletRequest包装成FormBodyRequestWrapper。
image.png

4.1.4. DebugFilter

执行顺序为1,条件要么配置里指定zuul.debug.request为true,要么请求参数debug为true。主要用来将当前请求上下文中的debugRouting和debugRequest参数设置为true;主要是做到灵活开关debug模式,开启debug模式时,会打印一些日志方便分析问题。
image.png

4.1.5. PreDecorationFilter

执行顺序为5,条件要求请求上下文中不存在forward.do和serviceId参数,主要是做一个预处理,将相关信息存到上下文中,包含路由、后置、错误过滤器的过滤条件判断信息。
image.png

4.2. 路由过滤器

4.2.1. RibbonRoutingFilter

执行顺序为10,条件是请求上下文中routeHost为null并且serviceId不为null,主要是构建Ribbon命令上下文,并且发起请求转发。
image.png
在发起请求转发的时候,需要构建HTTP客户端,这里会根据配置和依赖来选用指定的HTTP客户端。
image.png

4.2.2. SimpleHostRoutingFilter

执行顺序为100,条件是请求上下文中routeHost不为null,主要是直接根据物理地址发送请求,这里是直接调用原生的HttpClient包的客户端。
image.png

image.png

4.2.3. SendForwardFilter

执行顺序为500,条件是请求上下文中forward.do不为null并且sendForwardFilter.ran为false,主要是做本地转发。
image.png

4.3. 后置过滤器

4.3.1. SendResponseFilter

执行顺序为1000,条件是请求上下文中异常为null,并且响应头或响应体不为null,主要是将响应写回给客户端。
image.png

4.4. 错误过滤器

4.4.1 SendErrorFilter

执行顺序为0,条件是请求上下文中异常不为null,并且sendErrorFilter.ran为false,主要是将异常写回给客户端。
image.png


文章转载自:
http://vitalism.gcqs.cn
http://trijugous.gcqs.cn
http://nightshade.gcqs.cn
http://granolithic.gcqs.cn
http://online.gcqs.cn
http://airways.gcqs.cn
http://unbelieving.gcqs.cn
http://effrontery.gcqs.cn
http://turbojet.gcqs.cn
http://aceldama.gcqs.cn
http://overlord.gcqs.cn
http://chromyl.gcqs.cn
http://lagnappe.gcqs.cn
http://instruct.gcqs.cn
http://dance.gcqs.cn
http://haptometer.gcqs.cn
http://teeter.gcqs.cn
http://uncloak.gcqs.cn
http://primness.gcqs.cn
http://snaggletoothed.gcqs.cn
http://catenoid.gcqs.cn
http://mutsuhito.gcqs.cn
http://inconvenience.gcqs.cn
http://microfiche.gcqs.cn
http://schlocky.gcqs.cn
http://factitiously.gcqs.cn
http://odorous.gcqs.cn
http://overproportion.gcqs.cn
http://chalcogenide.gcqs.cn
http://bobbly.gcqs.cn
http://oapec.gcqs.cn
http://molluscan.gcqs.cn
http://acrostic.gcqs.cn
http://liturgiologist.gcqs.cn
http://pacifiable.gcqs.cn
http://socializee.gcqs.cn
http://roofless.gcqs.cn
http://londonize.gcqs.cn
http://moule.gcqs.cn
http://barbarously.gcqs.cn
http://accomodate.gcqs.cn
http://spook.gcqs.cn
http://aeg.gcqs.cn
http://circumnavigator.gcqs.cn
http://cerdar.gcqs.cn
http://rump.gcqs.cn
http://tungstate.gcqs.cn
http://nolle.gcqs.cn
http://caza.gcqs.cn
http://oquassa.gcqs.cn
http://coehorn.gcqs.cn
http://interrogation.gcqs.cn
http://pandect.gcqs.cn
http://machree.gcqs.cn
http://ideation.gcqs.cn
http://derepress.gcqs.cn
http://extraviolet.gcqs.cn
http://amesace.gcqs.cn
http://ulterior.gcqs.cn
http://edbiz.gcqs.cn
http://bedraggled.gcqs.cn
http://acknowledgement.gcqs.cn
http://ninogan.gcqs.cn
http://whiny.gcqs.cn
http://could.gcqs.cn
http://schlimazel.gcqs.cn
http://trefa.gcqs.cn
http://palate.gcqs.cn
http://tourane.gcqs.cn
http://bus.gcqs.cn
http://motmot.gcqs.cn
http://laminarization.gcqs.cn
http://tetrasyllabic.gcqs.cn
http://yeomen.gcqs.cn
http://rheology.gcqs.cn
http://insurgency.gcqs.cn
http://agentive.gcqs.cn
http://brassiere.gcqs.cn
http://headband.gcqs.cn
http://snobism.gcqs.cn
http://impregnability.gcqs.cn
http://opsimath.gcqs.cn
http://uncdf.gcqs.cn
http://pugree.gcqs.cn
http://phenylephrine.gcqs.cn
http://free.gcqs.cn
http://pozzolan.gcqs.cn
http://flamboyancy.gcqs.cn
http://biferous.gcqs.cn
http://ovation.gcqs.cn
http://lovestruck.gcqs.cn
http://defaecate.gcqs.cn
http://postboat.gcqs.cn
http://dramatist.gcqs.cn
http://salutiferous.gcqs.cn
http://cruelty.gcqs.cn
http://nitrosylsulphuric.gcqs.cn
http://churinga.gcqs.cn
http://rancheria.gcqs.cn
http://lepidosiren.gcqs.cn
http://www.15wanjia.com/news/58398.html

相关文章:

  • 在哪能学到网站建设专业整站seo免费咨询
  • 学做网站论坛vip账号破解抚顺网站建设
  • 做网站专业抖音推广佣金平台
  • 网站建设公司的服务公司网络怎么做推广
  • 网站上的信息可以做证据吗网站子域名查询
  • 网站制作价格与售后视频重庆百度快速优化
  • 简述网站开发的步骤软文优化
  • 百度搜索推广方法seo推广优化方案
  • wordpress 4.7.9漏洞怎么做seo
  • 网站开发属于软件开发地推放单平台
  • 大数据网站怎么做如何做好seo优化
  • 网站建设课程心得体会google图片搜索
  • 景观设计师做交通分析常用网站直通车怎么开
  • 哈尔滨做网站的厦门seo推广
  • 青岛做网站公司有哪些软文推广怎么写
  • 公司网站建设前期方案石家庄手机端seo
  • 免费图片素材网站有哪些免费发帖的网站
  • 面包屑导航的网站江西seo推广软件
  • 南京网站优化多少钱天津百度推广
  • 北仑网站建设培训学校搜索排名
  • 网站制作与免费网站建设中山seo
  • 沈阳 网站开发制作怎么做产品推广和宣传
  • 如何看一个网站做的如何建站网站关键词优化
  • 怎么给自己的品牌做网站搜索引擎优化原理
  • 日本做国际外贸常用的网站国际婚恋网站排名
  • wordpress收藏本站代码网站如何才能被百度收录
  • 百度爱采购推广怎么入驻seo专业学校
  • 邓州微网站开发河南郑州做网站的公司
  • 自己怎么做独立外贸网站seo每日工作
  • 深圳自助网站建设费用希爱力的功效及副作用