1. 网关简介
网关是系统唯一对外的入口,介于客户端与服务器端之间,用于对请求进行鉴权、限流、
路由、监控等功能。
1.1 Gateway 简介
这个项目提供了一个建立在 Spring 生态系统之上的 API 网关,包括:Spring 6、Spring Boot 3 和 project Reactor。Spring Cloud Gateway 旨在提供一种简单而有效的方法来路由到 api,并为它们提供跨领域的关注点,例如:安全性、监控/度量和弹性。
2. Reactor 简介
Reactor 是一种完全基于 Reactive Streams 规范的、全新的库。
2.1 响应式编程
响应式编程,Reactive Programming,是一种新的编程范式、编程思想。响应式编程最早由.Net 平台上的 Reactive eXtensions(Rx)库来实现。后来被迁移到了 Java平台,产生了著名的 RxJava。在此之上,后来又产生了 Reactive Streams 规范
2.2 Reactive Streams
Reactive Streams 是响应式编程的规范,定义了响应式编程的相关接口。只要符合该规范的库,就称为 Reactive 响应式编程库。
2.3 RxJava2
RxJava2 是一个响应式编程库,产生于 Reactive Streams 规范之后。但由于其是在 RxJava基础之上进行的开发,所以在设计时不仅遵循了Reactive Streams规范,同时为了兼容RxJava,使得 RxJava2 在使用时非常不方便。
2.4 Reactor
Reactor 是一种全新的响应式编程库,完全遵循 Reactive Streams 规范,又与 RxJava 没有任何关系,所以,其使用时非常方便,直观。
3. Zuul
Zuul 是 Netflix 的开源 API 网关。Zuul 是基于 Servlet 的,使用同步阻塞 IO,不支持长连接。Zuul 是 Spring Cloud 生态中的一员。
Zuul2.x 使用 Netty 实现了异步非阻塞 IO,支持长连接。但其未整合到 Spring Cloud
4. 重要概念
在 Spring Cloud Gateway 中有三个非常重要的概念:
4.1 route 路由
路由是网关的最基本组成,由一个路由 id、一个目标地址 url,一组断言工厂及一组 filter组成。若断言为 true,则请求将经由 filter 被路由到目标 url。
4.2 predicate 断言
断言即一个条件判断,根据当前的 http 请求进行指定规则的匹配,比如说 http 请求头,请求时间等。只有当匹配上规则时,断言才为 true,此时请求才会被直接路由到目标地址(目标服务器),或先路由到某过滤器链,经过过滤器链的层层处理后,再路由到相应的目标地址(目标服务器)。
4.3 filter 过滤器
对请求进行处理的逻辑部分。当请求的断言为 true 时,会被路由到设置好的过滤器,以对请求或响应进行处理。例如,可以为请求添加一个请求参数,或对请求 URI 进行修改,或为响应添加 header 等。总之,就是对请求或响应进行处理。
5. 工作原理解析
6. 基础应用
Maven 和 yml 配置
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
spring:
cloud:
gateway:
routes:
- id: my_route
uri: http://localhost:8081
predicates:
- Path=/**
# 跨域问题的局部解决方案
metadata:
cors:
allowedOrigins: '*'
allowedMethods:
- GET
- POST
allowedHeaders: '*'
maxAge: 30