Zuul

网关介绍


  • 由于微服务“各自为政的特性”是微服务的使用非常麻烦
  • 通常会设立“传播者”作为一个统一入口
  • 网关主要实现请求过滤和请求转发

Zuul 介绍


  • Zuul是网关大军中的医院,目前市场使用规律比较高
  • Zuul 除了实现请求过滤和转发,一般还作为鉴权和容错使用
  • Zuul 可以无缝衔接Ribbon和Hystrix

Zuul 使用

请求路由


  • Zuul 可以通过配置完成请求路由配置
  • Zuul 服务路由默认支持serviceId 作为上下文
  • ignored-services 可以禁用serviceId

请求路由表达式


  • ​?​​ ——> 匹配任意单个字符
  • ​*​​ ——> 配置匹配任意数量的字符
  • ​**​​ ——> 配置任意数量的字符,支持多级目录

Zuul 架构图

Zuul 网关简介_路由表

Zuul Filter 生命周期

Zuul 网关简介_路由表_02

Zuul 进阶

自定义Filter


  • 继承 ZuulFilter 并实现相应的方法
  • 设置Filter 类型、级别和是否启用
  • 开发具体的业务逻辑

核心 PreFilter

Filter名称

Filter作用

ServletDetectionFilter

检测当前请求是否使用ZuulServlet来处理运行

FormBodyWrapperFilter

解析表单数据,并对下游请求进行重新编码

DebugFilter

该过滤器会根据配置参数 ​​zuul.debug.request​​ 和请求中的 debug 参数来决定是否执行过滤器中的操作

PreDecorationFilter

此过滤器根据提供的 RouteLocator 确定在哪里和如何路由

核心 RoutingFilter

Filter名称

Filter作用

RibbonRoutingFilter

该过滤器只对请求上下文中存在的serviceId参数的请求进行处理,主要是面向服务路由的核心,它通过使用ribbon和hystrix来想服务实例发起请求,并将服务实例的请求结果返回

SimpleHostRoutingFilter

该过滤器只对URL配置的路由生效,主要是想routeHost 参数的物理地址发起请求,该Filter直接使用httpClient 完成调用,并没有使用Hystrix 进行封装

SendForwardFilter

该过滤器只对请求上下文中存在的 ​​forward.do​​ 参数进行处理请求,主要用来处理路由规则中的forward本地跳转装配

核心 PostFilter

Filter名称

Filter作用

SendErrorFilter

该过滤器主要利用上下文中的错误信息来组成一个forward到api网关/error 错误断点的请求来产生错误响应

SendResponseFilter

该过滤器主要利用上下文的响应信息来组织需要发送回客户端的响应内容

Zuul && Zuul2


  • Zuul 使用的是阻塞式线程完成业务调用
  • Zuul2 使用的是异步线程完成业务调用
  • 阻塞式线程调用

Zuul 网关简介_微服务_03

  • 异步线程调用

Zuul 网关简介_微服务_04

Zuul Cookie和头信息的处理


  • Zuul帮助我们过滤了一些非安全的信息
  • 诸如cookie, set-Cookie 和 authorization等
  • 通过设置 sensitiveHeaders来修改