Zuul
网关介绍
- 由于微服务“各自为政的特性”是微服务的使用非常麻烦
- 通常会设立“传播者”作为一个统一入口
- 网关主要实现请求过滤和请求转发
Zuul 介绍
- Zuul是网关大军中的医院,目前市场使用规律比较高
- Zuul 除了实现请求过滤和转发,一般还作为鉴权和容错使用
- Zuul 可以无缝衔接Ribbon和Hystrix
Zuul 使用
请求路由
- Zuul 可以通过配置完成请求路由配置
- Zuul 服务路由默认支持serviceId 作为上下文
- ignored-services 可以禁用serviceId
请求路由表达式
-
?
——> 匹配任意单个字符 -
*
——> 配置匹配任意数量的字符 -
**
——> 配置任意数量的字符,支持多级目录
Zuul 架构图
Zuul Filter 生命周期
Zuul 进阶
自定义Filter
- 继承 ZuulFilter 并实现相应的方法
- 设置Filter 类型、级别和是否启用
- 开发具体的业务逻辑
核心 PreFilter
Filter名称 | Filter作用 |
ServletDetectionFilter | 检测当前请求是否使用ZuulServlet来处理运行 |
FormBodyWrapperFilter | 解析表单数据,并对下游请求进行重新编码 |
DebugFilter | 该过滤器会根据配置参数 |
PreDecorationFilter | 此过滤器根据提供的 RouteLocator 确定在哪里和如何路由 |
核心 RoutingFilter
Filter名称 | Filter作用 |
RibbonRoutingFilter | 该过滤器只对请求上下文中存在的serviceId参数的请求进行处理,主要是面向服务路由的核心,它通过使用ribbon和hystrix来想服务实例发起请求,并将服务实例的请求结果返回 |
SimpleHostRoutingFilter | 该过滤器只对URL配置的路由生效,主要是想routeHost 参数的物理地址发起请求,该Filter直接使用httpClient 完成调用,并没有使用Hystrix 进行封装 |
SendForwardFilter | 该过滤器只对请求上下文中存在的 |
核心 PostFilter
Filter名称 | Filter作用 |
SendErrorFilter | 该过滤器主要利用上下文中的错误信息来组成一个forward到api网关/error 错误断点的请求来产生错误响应 |
SendResponseFilter | 该过滤器主要利用上下文的响应信息来组织需要发送回客户端的响应内容 |
Zuul && Zuul2
- Zuul 使用的是阻塞式线程完成业务调用
- Zuul2 使用的是异步线程完成业务调用
- 阻塞式线程调用
- 异步线程调用
Zuul Cookie和头信息的处理
- Zuul帮助我们过滤了一些非安全的信息
- 诸如cookie, set-Cookie 和 authorization等
- 通过设置 sensitiveHeaders来修改