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. Windows下使用virtualenv创建虚拟环境

    操作系统 : windowns10_x64Python版本:3.6.8virtualenv版本:16.7.7virtualenvwrapper版本:1.2.5 方式一:直接使用virtualenv 1 ...

  2. excel中添加下拉候选

    这里简单记录下如何在Excel2013中添加下拉候选. 首先有个思路是,下拉候选也就意味着数据被限制在一个范围之内,因此应该联想到数据验证相关的设置. 选中单列或单元格,在[数据]下的[数据验证]中选 ...

  3. Java后端高频面试题汇总

    Java后端面试题汇总 近来,分专题更新了Java后端面试题,此文章对这些文章做一个目录式的整理,方便查看 1.Java基础   https://www.cnblogs.com/autism-dong ...

  4. IDEA中新建SpringBoot项目时提示:Artifact contains illegal characters

    场景 一步一步教你在IEDA中快速搭建SpringBoot项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/87688277 ...

  5. JS(TS)中数组常见的方法(未完待续)

    push():向数组末尾添加一个或多个元素 unshift(): 向数组的开头添加一个或多个元素 pop(): 删除数组最后一个元素 shift(): 删除数组第一个元素 sort(): 给数组排序  ...

  6. 【转载】Android N 完全不同以往的四个新特性

    Google最近发布了Android的下一个版本,Android N的开发者预览版.此次预览版,可以让我们开发者在正式发布之前就测试代码,包括一些新的API,甚至于也可以提前反馈那些对于我们来说有些困 ...

  7. 【转载】Android IntentService使用全面介绍及源码解析

    一 IntentService介绍 IntentService定义的三个基本点:是什么?怎么用?如何work? 官方解释如下: //IntentService定义的三个基本点:是什么?怎么用?如何wo ...

  8. 033.[转] Java 工程师成神之路 | 2019正式版

    Java 工程师成神之路 | 2019正式版 原创: Hollis Hollis 2月18日 https://mp.weixin.qq.com/s/hlAn6NPR1w-MAwqghX1FPg htt ...

  9. 搭建 Telegraf + InfluxDB + Grafana 监控遇到几个小问题

    1:如果同一台服务器上安装有多个MongoDB实例,telegraf.conf 中关于 MongoDB 如何配置?配置数据在[INPUT PLUGINS的[[inputs.mongodb]]]部分. ...

  10. mac环境下Python虚拟环境的安装和配置

    虚拟环境(virtualenv) 安装:在终端输入 pip install virtualenv 如果没安装pip会出现 pip: command not found,此时需要进行 sudo easy ...