zuul的简单笔记
来源:互联网 发布:mac os x 10.9.3 iso 编辑:程序博客网 时间:2024/06/09 15:21
链接: 知乎 https://zhuanlan.zhihu.com/p/26494607 简单实例
知乎 https://zhuanlan.zhihu.com/p/28376627 源码介绍
github https://github.com/Netflix/zuul/wiki
spring社区 http://projects.spring.io/spring-cloud/spring-cloud.html#_router_and_filter_zuul
csdn http://blog.csdn.net/liuchuanhong1/article/details/62236793 filter讲解
zuul主要可以用来路由转发,也可以用来过滤请求。搭配Eureka的发现可以轻松实现转发功能,继承ZuulFilter类可以自定义过滤算法。(例子见第一条链接)
zuul的负载均衡通过Ribbon实现,proxy通过Eureka和Ribbon定位一个服务的instance并转发请求。 所有的请求通过hystrix command执行
zuul: ignoredServices: '*' routes: users: /myusers/**
通过上面的配置来忽略服务,但是如果一个服务id符合ignore pattern,同时又明确配置在转发表中,他将不会被忽略。上述配置中,users的服务不会被忽略。/myusers开头的请求会被转发到users服务,例如:/myusers/101会首先被转发到users,再访问/101
zuul: routes: users: path: /myusers/** serviceId: users_service
上述配置是细粒度更高的配置方式/myusers会被转发到users_service服务。 转发后的具体请求前缀可以配置,例如设置stripPrefix=false的话,请求的url不变。
还可以配置ignorepattern, 转发请求的前缀,人工配置转发服务地址等...人工配置url不能实现负载均衡,需要结合ribbon
zuul适用的一个场景是,处理老旧的接口。将这些陈旧的接口转发到新的接口处理,转发由zuul实现。
zuul.SendResponseFilter.post.disable=true
可以通过上述方式禁用一个filter。 Filter通过继承ZuulFilter实现,然后可以作为一个Bean添加到容器中启动。可以添加多个Filter
源码分析:
@EnableZuulProxy注解引入了@EnableCircuitBreaker和@EnableDiscoveryClient两个注解
同同时引入了ZuulProxyConfiguration配置类,继承自ZuulConfiguration类
该配置类首先引入了DiscoveryClient和RibbonCommandFactoryConfiguration用来发现client并负载均衡。
还注入了许多Filters的Bean
ZuulConfiguration是Zuul的核心类,他在缺失Servlet的情况下会注入一个ZuulServlet,同时也注入了许多Filters。
他还注入了初始化类ZuulFilterInitializer,该类用来将所有的Filter注册到FilterRegistry(会生成一个FilterRegistry和一个FilterLoader的实例)
FilterRegistry通过一个ConcurrentHashMap管理所有的Filter,并由FilterFileManager所持有的FiilterLoader调用。所以Filter实际上是由FilterFileManager中的一个方法轮询的去加载过滤器的。注册的过程是由FileLoader发起的,FilterRegistry只负责记录,不会主动去询问注册
ZuulServlet是一个类似于DispacherServlet的类,起到控制器的作用。
接收到请求后,调动init方法初始化生成RequestContext
然后调用preRoute,route和postRoute方法,每个方法中会调用这个阶段所有的Filter并执行(通过FilterLoader调用Filter)。
当一个程序启动后,首先程序会加载Configuration中的Bean,包括自己实现的Bean。
所有的Filter Bean会被注册到Registry上,这一步通过FilterLoader/FilterFileManager 实现。
一个请求到达后,首先Servlet进行拦截,并生成RequestContext。
进一步调用各个阶段的Filter进行处理,其中route阶段的filter负责 路由 + 过滤。
- zuul的简单笔记
- 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)
- 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)
- 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)
- 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)
- 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)
- 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)
- 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)
- 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)
- 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)
- Netflix学习笔记:Zuul
- Netflix学习笔记:Zuul
- Spring Cloud Zuul简单使用
- Zuul的高可用
- Zuul(SpringCloud学习笔记一)
- spirng cloud学习笔记-Zuul
- zuul 1.3.0 学习笔记
- SpringCloud学习笔记-zuul网关
- Tcl
- Android动态设定GridView的高度,固定column,实现高度自适应
- 提升出口新技能——搭建海外网站
- Jedis连接池满相关解决方案
- .net项目技术选型总结
- zuul的简单笔记
- java.nio.charset.MalformedInputException: Input length = 1
- SQL的having,distinct,exists用法介绍
- 带logo的二维码生成
- hibernate 主配置文件
- 适配器模式
- 解决chrome获取图片宽度和高度为0问题
- vnc使用过程中的问题
- iOS Mac版 终端安装weex环境以及运行效果