1. Zuul的工作机制

  

  Zuul提供了一个框架,可以对过滤器进行动态的加载,编译,运行。过滤器之间没有直接的相互通信,他们是通过一个RequestContext的静态类来进行数据传递的。RequetstContext类中的ThreadLocal变量来记录每个request所需要传递的数据。

  它包含了对请求的路由和过滤两个功能,其中路由功能负责将请求转发到具体的微服务 实例上,而过滤器功能则负责对请求进行预处理。

  然而实际上,路由功能在真正运行时,它的路由映射和请求转发功能也是由过滤器来完成的。路由映射器主要通过pre类型的的过滤器完成,将请求路径与配置的路由 规则进行匹配,找到需要的转发的目标地址,而请求转发的部分则是由route类型的过滤器来完成。

  所以,过滤器可以说是Zuul实现API网管功能最为核心的部件,每一个进入Zuul的HTTP请求都会经过一些列的过滤器处理连得到请求响应并返回给客户端。

  过滤器是由Groovy写得,这些过滤器文件被放在Zuul Server上的特定目录下面,Zuul会定期轮询这些目录,修改过的过滤器会动态的加载到Zuul Server中以便于request使用。

  

  过滤器的类型

  PRE:在请求达到Origin Server之前调用,比如身份验证

  CUSTOM:自定义的过滤器

  ROUTING:在路由请求时被调用

  POST:在routing和error过滤器之后被调用,比如做各种统计

  ERROR:在其他阶段发生错误时执行该过滤器

2. 分析

1. @EnableZuulProxy和@EnableZuulServer注解

  @EnableZuulServer注解:普通网关,只支持基本的route和filter

  @EnableZuulProxy注解: 配合上服务发现与熔断开关的@EnableZuulServer的增强版,具有反向代理的功能。

2. ZuulConfiguration

  

  

  这里时调用zuulFilter的入口

  

  这里时将所有的filter加载到FilterRegistry中

3. ZuulProxyConfiguration继承了ZuulConfiguration

  

4. 过滤器的介绍

  

5. ServletDetectionFilter过滤器

  用来检测当前请求是通过Spring的DispatcherServlet处理运行还是通过ZuulServlet来处理运行的,会被Servlet30WrapperFilter这个过滤器使用。

  

最新文章

  1. JS中的数学计算<之简单实例讲解>
  2. Java学习之LinkedHashMap学习总结
  3. Mac下安装ionic和cordova,并生成iOS项目
  4. Android之sqlite的使用 (转载)
  5. iOS开发中调试小技巧
  6. JS原型-语法甘露
  7. hql语句理解2
  8. OneApm,NewRelic
  9. useradd adduser linux创建用户、设置密码、修改用户、删除用户
  10. WindowListener中的windowClosed方法不执行的问题。
  11. Android 内存管理 &Memory Leak & OOM 分析
  12. JfreeCHart 异常:Chart image not found
  13. C语言学生管理系统(原版本)(自编)
  14. Ubuntu16.04下的2009q3交叉编译工具链的搭建
  15. mysql普通用户本机无法登录的解决办法
  16. 自学Linux Shell11.2-echo命令
  17. C++ 使用openssl库实现 DES 加密——CBC模式 && RSA加密——公加私解——私加公解
  18. [Java初探08]__简单学习Java类和对象
  19. pwd、ln和重定向命令
  20. HTML5学习笔记(二十七):Ajax

热门文章

  1. vue中使用Ueditor编辑器 -- 1
  2. MySQL构造测试数据
  3. oracle数据库 sqlplus
  4. depth peeling实现半透明
  5. ​Java面向对象的概念整理
  6. Mac 如何寻找Mac自带的IDLE
  7. HDU-2955 Robberies 浮点数01背包 自变量和因变量位置互换
  8. Git 合并流程
  9. Python socket通信之FTP
  10. Unity WWW类调用http