Zuul简介

Zuul在微服务架构中,可以作为提供动态路由,监控,弹性,安全等边缘服务的框架。在Netflix,被用作所有请求到达streaming application的前门。Zuul使用一系列不同的Filter可以提供各种功能:

  • 安全与认证
  • 监控
  • 动态路由
  • 压测
  • 限流
  • 静态响应
  • 多区域弹性负载均衡

可参考:How We Use Zuul At Netflix

Zuul执行流程

先从github把代码clone下来:git clone https://github.com/Netflix/zuul.git,切换至1.x分支,核心代码为zuul-core模块,几个重要的类清单如下:

类名 描述
RequestContext 继承至ConcurrentHashMap;被保存在ThreadLocal中;单例
ZuulServlet 继承至HttpServlet;核心方法为service()
ZuulFilter 抽象类,实现了Comparable接口,自定义Filter需从它继承
ZuulRunner ZuulServlet中用于代为执行route方法;核心方法为init(),初始化RequestContext中的request, response
FilterProcessor Filter执行器,Filter的runFilter方法再该类的processZuulFilter被调用;单例
FilterRegistry Filter注册器;一个(K, V)的ZuulFilter容器。单例
FilterLoader Filter管理器;主要提供了getFiltersByType(),putFilter()方法和初始化FilterFileManager;单例
FilterFileManager 声明了poller用于监听groovy文件夹的变化并通过FilterLoader.putFilter加入filter到FilterFileManager中。单例

具体执行流程如图所示:

ZuulFilter

ZuulFilter本身是个抽象类,通过继承ZuulFilter并实现以下三个方法,就可以定义各种Filter了:

/**
* 定义了同类型下filter的执行顺序:值越小优先被执行
*/
@Override
public int filterOrder() {
return 50000;
} /**
* 共四种类型:pre, route, post, error
*/
@Override
public String filterType() {
return "pre";
} /**
* 该filter是否能够被执行:抽象类ZuulFilter的runFilter有体现
*/
@Override
public boolean shouldFilter() {
return true;
} /**
/* filter的具体运行逻辑
*/
@Override
public Object run() {
return null;
}

Filter的生命周期

  • PRE:在路由至origin server之前被执行,可用于请求认证、选择origin server、日志记录。
  • ROUTING:在路由至origin server的过程中被执行。此时,原始的HTTP请求被构建,并且被Apache HttpClient或者Netflix Ribbon转发。
  • POST:当请求被路由至origin server后被执行,可用于添加标准的HTTP头至响应中、或者收集统计信息的纬度、以及流转该响应至客户端。
  • ERROR:当错误在任何其他阶段发生时被执行。

参考:官方wiki

EOF

Zuul 1.x 的工作原理的更多相关文章

  1. spring-cloud-Zuul学习(三)【中级篇】--Filter链 工作原理与Zuul原生Filter【重新定义spring cloud实践】

    这里开始记录zuul中级进阶内容.前面说过了,zuul主要是一层一层的Filter过滤器组成,并且Zuul的逻辑引擎与Filter可用其他基于JVM的语言编写,比如:Groovy. 工作原理 Zuul ...

  2. 菜鸟学Struts2——Struts工作原理

    在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...

  3. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  4. HashMap的工作原理

    HashMap的工作原理   HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间 ...

  5. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)

    RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...

  6. ThreadLocal 工作原理、部分源码分析

    1.大概去哪里看 ThreadLocal 其根本实现方法,是在Thread里面,有一个ThreadLocal.ThreadLocalMap属性 ThreadLocal.ThreadLocalMap t ...

  7. Servlet的生命周期及工作原理

    Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...

  8. 代码管理工具 --- git的学习笔记二《git的工作原理》

    通过几个问题来学习代码管理工具之git 一.git是什么?为什么要用它?使用它的好处?它与svn的区别,在Mac上,比较好用的git图形界面客户端有 git 是分布式的代码管理工具,使用它是因为,它便 ...

  9. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

随机推荐

  1. python进程基础点整理

    操作系统 串行: 一个程序完完整整的执行完再执行下一个 并发: 看起来像是同时运行,其实就是程序间的切换频率比较快,看不出来 并行:真正的同时运行 多道技术 空间复用:共用一个内存条,多个进程相互隔离 ...

  2. Linux下使命令不受终端断开的影响,保持在后台运行的几种方法及原理

    摘自https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/ 记录一下Linux下使命令不受终端断开的影响,保持在后台运行的几个方法及其原理.当用 ...

  3. JS基础语法---Math对象的案例

    系统Max求最大值: var result= Math.max(10,20,30,40); console.log(result); 练习1:自己定义一个对象,实现系统的max的方法   //例子:自 ...

  4. cell右侧的状态(accessoryType)

    Cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; Cell.accessoryType = UITableViewCe ...

  5. [20191101]完善vim的bccalc插件8.txt

    [20191101]完善vim的bccalc插件8.txt --//今天移植bccalc插件到linux,发现一些问题.我自己已经在windows下使用一段时间,从来没有在linux下测试.看来很少人 ...

  6. Druid-代码段-4-2

    所属文章:池化技术(一)Druid是如何管理数据库连接的? 本代码段对应流程4.1,连接池瘦身: //连接池瘦身 public void shrink(boolean checkTime, boole ...

  7. Linux下搭建及配置禅道服务器详细过程-包含软件资源-Dotest-董浩

    Linux环境下搭建禅道管理工具 1:百度云盘下载: 禅道--链接:https://pan.baidu.com/s/1Stu7nOZVIPO5TnpJWjWtiQ 提取码:dnik CentOs操作系 ...

  8. Codeforces Round #608 (Div. 2)

    传送门 A. Suits 签到. Code /* * Author: heyuhhh * Created Time: 2019/12/15 17:16:33 */ #include <iostr ...

  9. 《深度访谈:华为开源数据格式 CarbonData 项目,实现大数据即席查询秒级响应》

    深度访谈:华为开源数据格式 CarbonData 项目,实现大数据即席查询秒级响应   Tina 阅读数:146012016 年 7 月 13 日 19:00   华为宣布开源了 CarbonData ...

  10. LG1344 「USACO4.4」Pollutant Control 最小割

    问题描述 LG1344 题解 我太菜了,我一开始竟然没有看出这是个最小割裸题... 两个询问. 第一个询问,直接跑最小割就好了. 第二个询问,建图的时候边权建 \(1\) ,代表割掉这条边需要 \(1 ...