1、Gateway简介:
Gateway 是一种 API 网关(API Gateway)技术,它作为微服务架构中的关键组件,负责为系统的外部请求与内部服务之间提供统一的接入点。Spring Cloud Gateway 是基于 Spring 生态系统实现的一个高性能、易扩展的 API 网关解决方案。它基于 Spring Boot 2.0、Spring WebFlux 和 Project Reactor 构建,具备以下核心特性:
路由与转发:根据预定义的路由规则,将接收到的请求转发到相应的后端服务。路由规则可以基于路径、HTTP 方法、请求头、查询参数、Cookie 等多种条件进行匹配。
过滤器机制:通过一系列的过滤器链来处理请求和响应,实现鉴权、限流、熔断、日志记录、跨域处理、请求转换等中间件功能。
服务发现:与 Spring Cloud 的服务注册与发现组件(如 Eureka、Consul 或 Nacos)无缝集成,支持动态路由,即根据服务注册表自动创建路由到各个微服务实例。
断路器集成:内置对 Hystrix(现已推荐使用 Spring Cloud Circuit Breaker 通用断路器抽象)的支持,实现服务调用的熔断和降级。
安全与监控:可通过插件化的方式集成 OAuth2、JWT 等安全机制,以及与 Prometheus、Zipkin 等监控工具配合,实现网关层面的安全控制和性能监控。
2、Spring Cloud Gateway 基本使用与配置
基本配置:
在 Spring Cloud Gateway 中,主要通过 YAML 或 properties 文件(通常为 application.yml
或 application.properties
)进行配置。基本配置主要包括以下几个部分:
全局配置:
server:
port: 9527 # 网关服务端口
spring:
application:
name: cloud-gateway # 网关服务名称
cloud:
gateway:
discovery:
locator: # 与服务发现组件集成
enabled: true # 开启从注册中心动态创建路由的功能
路由配置:
spring:
cloud:
gateway:
routes:
- id: payment_routh # 路由 ID,需唯一
uri: lb://CLOUD-PAYMENT-SERVICE # 转发的目标服务地址,使用服务名通过服务发现机制动态查找
predicates:
- Path=/Payment/getPaymentById/** # 路由匹配规则,基于请求路径
- After=2020-11-20T17:07:24.352+08:00[Asia/Shanghai] # 时间断言,仅匹配在此时间点之后的请求
# 其他断言,如基于请求头、Cookie、查询参数等的匹配规则
- id: payment_routh2 # 另一条路由配置,同上
uri: lb://CLOUD-PAYMENT-SERVICE
predicates:
- Path=/Payment/lb/**
过滤器配置:
虽然上面的示例中没有直接展示过滤器配置,但过滤器是 Spring Cloud Gateway 实现功能的核心。可以通过定义全局过滤器或路由级别的过滤器来添加自定义逻辑。例如,可以编写自定义过滤器实现鉴权、限流、日志记录等功能,并在配置文件中引用。
3、Spring Boot 整合 Spring Cloud Gateway 示例
以下是整合 Spring Cloud Gateway 的大致步骤:
3.1、创建 Spring Boot 项目:
使用 Spring Initializr 创建一个新的 Spring Boot 项目,选择所需的 Spring Cloud 版本及相关依赖,包括
spring-cloud-starter-gateway
。
3.2、添加依赖:
在项目的 pom.xml
或 build.gradle
文件中添加 Spring Cloud Gateway 依赖。例如,使用 Maven 的 pom.xml
:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- 如果使用服务发现,添加相应服务发现组件依赖,如 Eureka、Consul 或 Nacos -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- 其他依赖,如断路器、安全、监控等 -->
</dependencies>
3.3、配置网关:
在项目的 application.yml
或 application.properties
文件中按照前面提到的基本配置示例设置网关的各项参数,包括端口、服务名、路由规则、断言、过滤器等。
3.4、编写自定义过滤器(可选):
若有特殊需求,如自定义鉴权逻辑、限流策略等,可以编写自定义的 Gateway Filter。实现 GatewayFilter
接口或继承 AbstractGatewayFilterFactory
类,并在配置文件中引用。
3.5、启动应用:
启动 Spring Boot 应用,网关服务就会开始监听指定端口,并根据配置的路由规则和过滤器链处理接收到的请求。
GateWay中的具体代码实现,后面详述,本章知识简单介绍和说明