当前位置: 首页 > news >正文

介绍Spring Cloud Gateway

文章目录

      • 一、核心定位与价值
      • 二、核心特性
      • 三、核心概念
      • 四、工作原理
      • 五、简单使用示例
        • 1. 引入依赖(Maven)
        • 2. 配置路由规则(application.yml)
          • 示例 1:基本路由(转发到固定地址)
          • 示例 2:结合服务发现(动态转发到服务名)
        • 3. 自定义过滤器(示例:简单认证)
      • 六、高级功能示例
        • 1. 限流(基于 IP)
        • 2. 集成 Sentinel 熔断降级
      • 七、适用场景
      • 总结

Spring Cloud Gateway 是 Spring Cloud 生态中的 新一代 API 网关,基于 Spring 5、Spring Boot 2.x 和 Project Reactor 开发,采用 非阻塞响应式编程模型,旨在为微服务架构提供统一的入口,实现路由转发、负载均衡、熔断降级、限流、认证授权等核心功能。它替代了已停止维护的 Spring Cloud Netflix Zuul,成为当前 Spring Cloud 网关的首选方案。

一、核心定位与价值

在微服务架构中,服务数量众多且分散,API 网关作为系统的“入口层”,承担以下核心职责:

  1. 统一入口:所有外部请求(如前端、移动端)通过网关进入系统,避免直接访问内部服务;
  2. 路由转发:根据请求路径、参数等规则,将请求转发到对应的微服务;
  3. 横切关注点:集中处理非业务逻辑(如认证、限流、监控、日志),减少服务重复开发;
  4. 服务治理:结合负载均衡、熔断降级等机制,保障系统稳定性。

二、核心特性

  1. 非阻塞响应式:基于 Netty 和 Reactor 实现,支持高并发、低延迟,性能远超传统阻塞式网关(如 Zuul 1.x);
  2. 动态路由:路由规则可通过配置文件、数据库或配置中心(Nacos/Apollo)动态更新,无需重启网关;
  3. 强大的路由匹配:支持基于路径(Path)、请求头(Header)、参数(Query)、方法(Method)等多种条件的路由匹配;
  4. 集成 Spring 生态:无缝对接 Spring Cloud 服务发现(Eureka/Nacos)、负载均衡(Spring Cloud LoadBalancer)、熔断降级(Sentinel/Resilience4j)等组件;
  5. 内置过滤器链:提供丰富的内置过滤器(如路径重写、请求头修改、跨域处理),支持自定义过滤器扩展;
  6. 限流支持:可基于 IP、路径、用户等维度实现限流,防止流量过载;
  7. 监控与追踪:集成 Spring Boot Actuator 提供监控指标,支持 Sleuth/Zipkin 分布式追踪。

三、核心概念

理解 Gateway 的核心概念是掌握其工作原理的关键:

概念含义说明
Route(路由)网关的基本单元,由 ID(唯一标识)、目标 URI(转发地址)、Predicate(断言)Filter(过滤器) 组成。当请求满足断言条件时,会被转发到目标 URI。
Predicate(断言)路由的匹配规则,基于 Spring Framework 的 Predicate 函数实现,用于判断请求是否符合路由条件(如路径匹配 /api/user/**、请求方法为 GET 等)。
Filter(过滤器)对请求/响应进行拦截和处理的组件,分为 GatewayFilter(路由过滤器,仅对当前路由生效)GlobalFilter(全局过滤器,对所有路由生效)。可实现日志记录、权限校验、路径重写等功能。

四、工作原理

Gateway 的工作流程可概括为“请求拦截→断言匹配→过滤器处理→路由转发”:

  1. 请求拦截:客户端请求进入 Gateway 后,首先被 Netty 服务器接收,交由 Gateway 的核心处理器处理;
  2. 断言匹配:处理器根据配置的路由规则,依次通过 Predicate 对请求进行匹配(如路径是否为 /api/order/**、请求头是否包含 Token 等),找到第一个匹配的路由;
  3. 过滤器链执行:匹配到路由后,请求进入该路由的过滤器链(包括全局过滤器和路由过滤器),执行前置处理(如认证、日志记录);
  4. 路由转发:过滤器链前置处理完成后,Gateway 通过负载均衡器(如 Spring Cloud LoadBalancer)将请求转发到目标服务实例;
  5. 响应处理:目标服务返回响应后,请求再次经过过滤器链执行后置处理(如响应头修改、结果转换),最终返回给客户端。

五、简单使用示例

1. 引入依赖(Maven)
<!-- Spring Cloud Gateway 核心依赖 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency><!-- 服务发现(如 Nacos,用于动态获取服务实例) -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

注意:Gateway 基于响应式编程,需排除 Spring MVC 依赖(避免冲突)。

2. 配置路由规则(application.yml)

通过配置文件定义路由,支持两种风格:快捷配置完整配置

示例 1:基本路由(转发到固定地址)
spring:cloud:gateway:routes:- id: user-service-route  # 路由唯一IDuri: http://localhost:8081  # 目标服务地址(固定地址)predicates:- Path=/api/user/**  # 断言:路径匹配 /api/user/** 时触发路由filters:- RewritePath=/api/user/(?<segment>.*), /user/$\{segment}  # 路径重写:/api/user/1 → /user/1
示例 2:结合服务发现(动态转发到服务名)
spring:cloud:gateway:routes:- id: order-service-routeuri: lb://order-service  # 目标服务名(lb:// 表示启用负载均衡)predicates:- Path=/api/order/**  # 匹配路径- Method=GET  # 仅匹配 GET 请求filters:- StripPrefix=1  # 去除路径前缀:/api/order/1 → /order/1
  • lb://order-service 表示通过服务发现(如 Nacos)获取 order-service 的实例列表,并通过负载均衡选择实例转发。
3. 自定义过滤器(示例:简单认证)

实现 GlobalFilter 接口定义全局过滤器,对所有请求进行认证校验:

@Component
public class AuthFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 获取请求头中的 TokenString token = exchange.getRequest().getHeaders().getFirst("Token");// 简单校验:Token 不存在则返回 401if (token == null || token.isEmpty()) {exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}// 校验通过,继续执行过滤器链return chain.filter(exchange);}// 过滤器优先级:数值越小,优先级越高@Overridepublic int getOrder() {return -100;}
}

六、高级功能示例

1. 限流(基于 IP)

使用内置的 RequestRateLimiter 过滤器,基于 Redis 实现令牌桶限流:

spring:cloud:gateway:routes:- id: limit-routeuri: lb://user-servicepredicates:- Path=/api/user/**filters:- name: RequestRateLimiterargs:redis-rate-limiter.replenishRate: 10  # 令牌桶填充速率(每秒10个)redis-rate-limiter.burstCapacity: 20  # 令牌桶最大容量(最多20个)key-resolver: "#{@ipKeyResolver}"  # 基于 IP 限流的解析器redis:host: localhost  # Redis 地址(限流依赖 Redis)# 定义 IP 解析器
@Configuration
public class RateLimitConfig {@Beanpublic KeyResolver ipKeyResolver() {return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getAddress().getHostAddress());}
}
2. 集成 Sentinel 熔断降级

结合 Sentinel 实现路由级别的熔断降级,当目标服务异常时返回降级响应:

# 引入 Sentinel 依赖后,配置熔断规则
spring:cloud:sentinel:transport:dashboard: localhost:8080  # Sentinel 控制台gateway:routes:- id: sentinel-routeuri: lb://pay-servicepredicates:- Path=/api/pay/**filters:- name: Sentinel  # 启用 Sentinel 过滤器args:blockHandler: com.example.gateway.handler.FallbackHandler  # 降级处理类

七、适用场景

  • 微服务统一入口:替代传统的 Nginx 作为业务网关,处理服务路由和横切逻辑;
  • API 版本管理:通过路径匹配(如 /v1/user/**/v2/user/**)转发到不同版本的服务;
  • 前后端分离架构:处理跨域(CORS)、请求转发,避免前端直接访问后端服务;
  • 流量控制中心:集中实现限流、熔断、监控,保障系统在高并发下的稳定性。

总结

Spring Cloud Gateway 作为新一代 API 网关,凭借响应式编程的高性能、丰富的路由能力和 Spring 生态的无缝集成,成为微服务架构中流量管理的核心组件。它不仅能实现基本的路由转发,还能通过过滤器和第三方组件集成,满足认证授权、限流熔断、监控追踪等复杂需求,是构建高可用、可扩展微服务系统的关键一环。

http://www.dtcms.com/a/541584.html

相关文章:

  • 成都自适应网站建设域名主机网站导航
  • 【数据结构】队列(Queue)详解——数据结构的“先进先出”
  • 【操作系统】计算机系统概述
  • 为什么Android游戏画面在30帧运行时有抖动现象
  • 做的好的手机网站建设银行官方网站认证
  • 云南建设厅网站备案厂家域名审核怎么做返利网站
  • docker compose配置容器只允许指定的外部IP访问
  • 【postgresql在sql的基础上将frvcd按照逗号分割,核查两个表中frvcd数量是否相同】
  • 考研政治(马原)
  • 电商网站开发工作室商务网站模板
  • 金融交易防护:国密 SSL 证书在网银与移动支付中的核心作用
  • 织梦图片瀑布流网站模板摄影作品发布平台
  • spark-RDD期中
  • Linux 网络初识
  • 易天光通信光模块认证全解析:构建全球品质信任网络
  • 计算机网络自顶向下方法12——应用层 对HTTP响应报文优先次序的答疑
  • 上海企业建设网站服务网站的首页标题在哪里设置的
  • 城市建设规划网站无锡网站建设f7wl
  • 算法题 逆波兰表达式/计算器
  • 智能体最佳实践的方法论(四):监控
  • 【java面向对象进阶】------内部类
  • 基于昇腾 NPU 的 Gemma 2 推理实测:性能评测、脚本实现与可视化分析
  • 南京设计公司郑州粒米seo顾问
  • 承接电商网站建设中文网站模板大全
  • 折半查找及其判定树的性质
  • Day 6 PPI与Cox
  • 网站dns刷新庐江县建设局网站
  • 网站的按钮怎么做 视频3g 手机网站建设
  • 豆包凶猛,深度解析字节AI战略
  • 【案例实战】HarmonyOS云开发实战:5分钟快速构建全栈应用