Zuul 1.x 的工作原理
Zuul简介
Zuul在微服务架构中,可以作为提供动态路由,监控,弹性,安全等边缘服务的框架。在Netflix,被用作所有请求到达streaming application
的前门。Zuul使用一系列不同的Filter
可以提供各种功能:
- 安全与认证
- 监控
- 动态路由
- 压测
- 限流
- 静态响应
- 多区域弹性负载均衡
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 的工作原理的更多相关文章
- spring-cloud-Zuul学习(三)【中级篇】--Filter链 工作原理与Zuul原生Filter【重新定义spring cloud实践】
这里开始记录zuul中级进阶内容.前面说过了,zuul主要是一层一层的Filter过滤器组成,并且Zuul的逻辑引擎与Filter可用其他基于JVM的语言编写,比如:Groovy. 工作原理 Zuul ...
- 菜鸟学Struts2——Struts工作原理
在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...
- 【夯实Nginx基础】Nginx工作原理和优化、漏洞
本文地址 原文地址 本文提纲: 1. Nginx的模块与工作原理 2. Nginx的进程模型 3 . NginxFastCGI运行原理 3.1 什么是 FastCGI ...
- HashMap的工作原理
HashMap的工作原理 HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间 ...
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...
- ThreadLocal 工作原理、部分源码分析
1.大概去哪里看 ThreadLocal 其根本实现方法,是在Thread里面,有一个ThreadLocal.ThreadLocalMap属性 ThreadLocal.ThreadLocalMap t ...
- Servlet的生命周期及工作原理
Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...
- 代码管理工具 --- git的学习笔记二《git的工作原理》
通过几个问题来学习代码管理工具之git 一.git是什么?为什么要用它?使用它的好处?它与svn的区别,在Mac上,比较好用的git图形界面客户端有 git 是分布式的代码管理工具,使用它是因为,它便 ...
- 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL
周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...
随机推荐
- SpringBoot无法访问webapp目录下的文件
springboot version:2.1.9-RELEASE 解决方案: 在pom中添加此段 完美解决,代码的作用是让src/main/webapp在编译的时候在resoureces路径下也生成w ...
- (转)阿里 RocketMQ 安装与简介
原文:阿里 RocketMQ 安装与简介 一.简介 官方简介: l RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点: l 能够保证严格的消息顺序 l 提供丰富的消息拉取模式 l ...
- Selenium(十二):操作Cookie、调用JavaScript、HTML5的视频播放
1. 操作Cookie 有时候我们想要验证浏览器中cookie是否正确,因为基于真实cookie的测试是无法通过白盒和集成测试的.WebDriver提供了操作Cookie的相关方法,可以读取.添加和删 ...
- Java操作数据库——使用JDBC连接数据库
Java操作数据库——使用JDBC连接数据库 摘要:本文主要学习了如何使用JDBC连接数据库. 背景 数据持久化 数据持久化就是把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应 ...
- Python:多态、协议和鸭子类型
多态 问起面向对象的三大特性,几乎每个人都能对答如流:封装.继承.多态.今天我们就要来说一说 Python 中的多态. 所谓多态:就是指一个类实例的相同方法在不同情形有不同表现形式.多态机制使具有不同 ...
- html文本框默认值刷新后无法继续显示解决方法
转载于:https://blog.csdn.net/yufeitong/article/details/8485129 有这种情况,文本框输入值后,再次刷新默认值就无法显示了 原始html代码: &l ...
- jdbc大略
一.概述JDBC JDBC从物理结构上说就是Java语言访问数据库的一套接口集合. 从本质上来说就是调用者(程序员)和实现者(数据库厂商)之间的协议. JDBC API: 使得开发人员可以使用纯Jav ...
- Python list遍历remove()时的一个小BUG
有这样一个列表: s=list('abcdefg') 现在因为某种原因我们需要从s中踢出一些不需要的元素,方便起见这里直接以踢出所有元素的循环代替: for e in s: s.remove(e) 结 ...
- PHP 部分语法(一)
PHP: PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言,它以 <?php 开始,并以 ?> 结束: 它还是一门弱类型语言,类型不需显式声明 变量: PHP 没有声明变量的命令 ...
- CodeForces - 763A(并查集/思维)
题意 https://vjudge.net/problem/CodeForces-763A 一棵无根树中各个节点被染上了一种颜色c[i] 现在让你选择一个点作为根节点,使得这个根节点的所有儿子满足以该 ...