SpringCloud- 第十三篇 Zuul高层架构(二)

时间:2020-07-22 20:21:09   收藏:0   阅读:71
1:架构图

技术图片

2:ZuulServlet

Zuul的核心是一系列的filters,Zuul大部分功能都是通过过滤器来实现的

1:ZuulServlet是Zuul的核心类,用来调度不同阶段的filters,处理请求,并处理异常等,路径是/zuul,可以使用zuul.servlet-path属性更改此路径
2:功能类似于SpringMvc的DispatcherServlet,所有的Request都要经过它的处理
3:里面有三个核心方法:preRoute(),route(),?postRoute()
4:ZuulServlet会把具体的执行交给ZuulRunner去做,ZuulServlet是单例,因此ZuulRunner也仅有一个实例
5:Zuul的过滤器之间没有直接的相互通信,它们之间通过一个RequestContext的静态类来进行数据传递的。RequestContext类中有ThreadLocal变量来记录每个Request所需要传递的数据,ZuulRunner会初始化RequestContext
6:ZuulRunner直接将执行逻辑交由FilterProcessor处理,FilterProcessor也是单例,其功能就是依据filterType执行filter的处理逻辑,大致过程如下:
(1)根据Type获取所有输入该Type的filter
(2)遍历执行每个filter的处理逻辑,processZuulFilter(ZuulFilter filter)
(3)RequestContext对每个filter的执行状况进行记录,如果执行失败则对异常封装后抛出

3:生命周期

技术图片

4:过滤器类型与请求生命周期

5:核心过滤器

5.1:概述

在spring cloud zuul中,为了让api网关组件可以被更方便的使用,它在http请求生命周期的各个阶段默认实现了一批核心过滤器,它们会在api网关服务启动的时候被自动加载和启动。
默认spring-cloud-netflix-core模块org.springframework.cloud.netflix.zuul.filters包下

5.2:pre过滤器

5.3:route过滤器

6: 重试机制

7: 饿汉式加载

8:上传文件

8.1:对于小文件

Zuul不用做任何特别配置,直接按照路径进行路由就可以了

8.2:对于大文件

一个简单的方案就是使用在你的路径前添加上/zuul/,来绕开Spring的DispatcherServlet,以避免多部分处理,同时也规避了后台提取中文名乱码的问题。

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=15000

ribbon.ConnectTimeout=500
ribbon.ReadTimeout=15000

# 9:健康检查
- 加入依赖

<dependency>??
<groupId>org.springframework.boot</groupId>??
<artifactId>spring-boot-starter-actuator</artifactId>??
</dependency>??

- 配置示例

#开启健康检查(需要spring-boot-starter-actuator依赖)??
eureka.client.healthcheck.enabled=true??
#租期到期时间,默认90秒??
eureka.instance.lease-expiration-duration-in-seconds=30??
#租赁更新时间间隔,默认30,即30秒发送一次心跳??
eureka.instance.lease-renewal-interval-in-seconds=10?
#hystrix?dashboard的信息收集频率,默认500毫秒?,设置dashboard的刷新频率
hystrix.stream.dashboard.intervalInMilliseconds=5000?

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!