You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
2.9 KiB
Markdown

# SpringCloud - Gateway
## 1. 基础介绍
- SpringCloud Gateway 的核心概念
- SpringCloud Gateway 是 Spring 官方最新推出的一款基于 SpringFramework 5, Project Reactor 和SpringBoot 2之上开发的网关
- 它与第一代网关 Zuu 不同的是: gateway 是异步非阻塞的(netty + webflux 实现), zuul是同步阻塞请求的
- Gateway 三大组成部分
- Route 路由(ID + 目标URL) - Predicate 断言 - Filter 过滤器
- SpringCloud Gateway 的工作模型
- SpringCloud Gateway 工作模型图示及解读
- 请求发送到网关,经由分发器将请求匹配到相应的 HandlerMapping
- 请求和处理器之间有一个映射,路由到网关处理程序,即 Web Handler
- 执行特定的请求过滤器链 (Filters Proxy Filter)
- 最终到达代理的微服务 (Proxied Service)
---
## 2. 谓词 Predicate 的原理与应用
- 参考: [PredicateTest.java]
## 3. 集成 Nacos 实现动态路由配置
- 静态路由配置
- 静态路由配置写在配置文件中(yml或者 properties 文件中),端点是:spring.cloud.gateway
- 缺点非常明显,每次改动都需要网关模块重新部署
---
## 4. 注册网关事件监听器
- 参考: [DynamicRouteServiceImpl.java] | [DynamicRouteServiceImplByNacos.java]
- 验证网关监听器的可用性 修改看是否可以生效, 已经测试成功
---
## 5. 解读 SpringCloud Gateway Filter
- SpringCloud Gateway Filter 的相关概念
- SpringCloud Gateway 基于过滤器实现,同 zuul 类似,有 pre 和 post 两种方式的filter分别处理前置逻辑和后置逻辑
- 客户端的请求先经过 pre 类型的 filter然后将请求转发到具体的业务服务收到业务服务的响应之后再经过 post 类型的 fiter 处理,最后返回响应到客户端
- Filter 一共有两大类: 全局过滤器 和 局部过滤器
- 搜索 GlobalFilter 就可以知道 Gateway 所支持的所有过滤器
- 添加前缀的局部过滤器: PrefixPathGatewayFilterFactory -> 局部过滤器返回均为 GatewayFilter
- 添加后缀过滤器(去掉前缀): StripPrefixGatewayFilterFactory
---
- SpringCloud Gateway Filter 的执行流程
- 过滤器有优先级之分Order越大优先级越低越晚被执行
- 全局过滤器所有的请求都会执行
- 局部过滤器只有配置的请求才会执行
---
## 6. 局部过滤器 - 校验 Header 中的 Token
- 实现一个局部过滤器, 和局部过滤器工厂
- [HeaderTokenGatewayFilter.java] + [HeaderTokenGatewayFilterFactory.java]
---
## 7. 缓存 HTTP 请求 Body 的全局过滤器
- 缓存 HTTP 请求 Body 的全局过滤器
- [GlobalCacheRequestBodyFilter.java]
---
## 8. 登录、注册、鉴权全局过滤器
- [GlobalLoginOrRegisterFilter.java]
---
## 9. 代码与文件两种方式配置网关路由
## 10. 验证网关微服务功能可用性
## 11. SpringCloud Gateway 微服务入口网关总结