本文原创地址,
[jsbintask的博客](https://jsbintask.cn/2019/03/28/springcloud/springcloud-zuul-process/)(食用效果最佳),转载请注明出处!
html
最近公司最新架构肯定使用微服务以后,通过讨论,最终仍是选用了SpringCloud
的体系。我负责网关,鉴权服务的研发。记录下这段时间新接触的知识。java
springcloud选用了最新的稳定版本Greenwich
,因此对于网关来讲,有两种框架选择:SpringCloud Gateway
, Zuul
,通过调研我最终选用了Zuul,缘由以下:spring
TODO
,这不是一个大坑吗! Gateway文档Reactive
的人来讲阅读源码有必定难度。Proxy Avg Latency Avg Req/Sec/Thread
gateway 6.61ms 3.24k
linkered 7.62ms 2.82k
zuul 12.56ms 2.09k
none 2.09ms 11.77k
复制代码
使用Zuul的关键在于自定义Filter
,固然这个Filter不是Servlet对应的Filter,而且不一样类型的Filter使用相同的配置却有不一样的效果。秉着知其因此然
的精神,把整个Zuul处理过程的源码debug了一遍;编程
Zuul处理请求的入口是一个Servlet:ZuulServlet
,SpringCloud也提供另外的处理入口,一个Servlet Filter: ZuulServletFilter
,修改配置文件zuul.use-filter=true
便可。 它进入ZuulServlet的过程以下: 架构
ThreadLocal
,将httpServlet,httResponse放入其中,方便后面自定义的ZuulFilter能够获取。pre filter
。route filter
。post filter
。 注意点:再调用各个filter的过程当中若是出现异常,都会调用error filter
。 接着咱们查看pre filter是如何调用的:
本章咱们从技术选型出发,比较了zuul和gateway的优缺点。最后经过阅读源码的方式整理了Zuul处理请求的整个过程。 下一章:如何自定义Zuul Filter以及所遇到坑!
框架
关注我,这里只有干货!
函数