Spring Cloud GateWay学习(1)--入门
一、前言
1. 版本信息
-
Spring Cloud Gateway–3.1.0
2. 学习参考资料
-
官方文档:
二、Spring Cloud Gateway
1. 思考为什么要使用网关
- 可在网关实现一些统一的逻辑,不用每个服务都实现一套。(如权限校验)
- 使用网关后,对外暴露的永远是一个域名,不管内部的微服务怎么重新拆分,域名都不会变
- 便于Api的统一管理。如限流、监控等
2. Spring Cloud Gateway概述
2.1 简述
-
Spring Cloud Gateway 是Spring Cloud生态的第二代网关。(Zuul是第一代) Spring Cloud Gateway 建立在Spring Boot 2.x、Spring WebFlux和Project Reactor之上 Spring Cloud Gateway 需要 Spring Boot 和 Spring Webflux 提供的 Netty 环境 Spring Cloud Gateway 不适用于传统的 Servlet 容器(如Tomcat),不能构建成WAR包,只能Jar包 Spring Cloud Gateway 不支持Sring Boot 1.x
备注: Netty:网络通信框架,实现高性能的服务端和客户端 官网: Reactor:Reactive编程模型的实现 官网: WebFlux:Reactive的web框架 Spring WebFlux:
2.2 架构图
官网描述: 客户端向 Spring Cloud Gateway 发出请求。如果网关处理程序映射确定请求与路由匹配,则将其发送到网关 Web 处理程序。此处理程序通过特定于请求的过滤器链运行请求。过滤器用虚线划分的原因是过滤器可以在发送代理请求之前和之后运行逻辑。执行所有“预”过滤器逻辑。然后发出代理请求。发出代理请求后,将运行“发布(后置)”过滤器逻辑。
源码
-
Gateway Handler Mapping : org.springframework.cloud.gateway.handler.RoutePredicateHandlerMapping Gateway Web Handler : org.springframework.cloud.gateway.handler.FilteringWebHandler
2.3 核心术语
-
Route(路由)
-
Predicate(谓词)
java.util.function.Predicate (Java8谓词函数), Spring Cloud Gateway使用Predicate实现路由的匹配条件(如请求头和参数)。
-
Filter(过滤器)
通过过滤器,在发送下游请求之前或之后修改请求和响应。
备注: Java8谓词函数:
