7 配置访问前缀
通过以下配置来给网关路径添加前缀,此处添加了/proxy前缀,这样我们需要访问http://localhost:8801/proxy/user-service/user/1才能访问到user-service中的接口。
8 Header过滤及重定向添加Host
- Zuul在请求路由时,默认会过滤掉一些敏感的头信息,以下配置可以防止路由时的Cookie及Authorization的丢失:
- Zuul在请求路由时,不会设置最初的host头信息,以下配置可以解决:
9 查看路由信息
我们可以通过SpringBoot Actuator来查看Zuul中的路由信息。
a 在pom.xml中添加相关依赖:
b 修改application.yaml配置文件,开启查看路由的端点:
c 查看简单路由信息:
通过访问http://localhost:8801/actuator/routes查看简单路由信息:
d 查看详细路由信息:
通过访问http://localhost:8801/actuator/routes/details查看详细路由信息:
10 过滤器
- 路由与过滤是Zuul的两大核心功能,
- 路由功能负责将外部请求转发到具体的服务实例上去,是实现统一访问入口的基础,
- 过滤功能负责对请求过程进行额外的处理,是请求校验过滤及服务聚合的基础。
a 过滤器类型
Zuul中有以下几种典型的过滤器类型。
- pre:在请求被路由到目标服务前执行,比如权限校验、打印日志等功能;
- routing:在请求被路由到目标服务时执行,这是使用Apache HttpClient或Netflix Ribbon构建和发送原始HTTP请求的地方;
- post:在请求被路由到目标服务后执行,比如给目标服务的响应添加头信息,收集统计数据等功能;
- error:请求在其他阶段发生错误时执行。
b 过滤器的生命周期
下图描述了一个HTTP请求到达API网关后,如何在各种不同类型的过滤器中流转的过程。
c 自定义过滤器
c-1 添加PreLogFilter类继承ZuulFilter
这是一个前置过滤器,用于在请求路由到目标服务前打印请求日志。
c-2 开启过滤器
添加过滤器后,我们访问http://localhost:8801/user-service/user/1测试下,会打印如下日志。
c-3 禁用过滤器
c-4 核心过滤器
11 Ribbon和Hystrix的支持
由于Zuul自动集成了Ribbon和Hystrix,所以Zuul天生就有负载均衡和服务容错能力,我们可以通过Ribbon和Hystrix的配置来配置Zuul中的相应功能。
- 可以使用Hystrix的配置来设置路由转发时HystrixCommand的执行超时时间:
- 可以使用Ribbon的配置来设置路由转发时请求连接及处理的超时时间:
12 常用配置
使用到的模块