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

SpringCloudGateway:像城市交通指挥系统一样的微服务网关

实际场景引入

想象一下,你所在的城市正在举办一场国际峰会,成千上万的车辆需要有序进出城市。如果没有一个高效的交通指挥系统,城市将陷入瘫痪。交警、信号灯、应急车道、限行规则……这些元素共同构成了城市的‘网关’,决定着每一辆车(请求)能否通行、走哪条路、是否需要检查。

在微服务架构中,Spring Cloud Gateway 就扮演着这个“城市交通指挥系统”的角色。它位于所有外部请求和内部微服务之间,负责路由、过滤、限流、安全等核心职责。

深度解析:核心组件与代码示例

1. 路由(Route)—— 像交警指引车辆走向正确的道路

路由是网关最基本的功能,它定义了请求的路径如何被转发到具体的微服务。

// 配置类方式定义路由
@Configuration
public class GatewayConfig {@Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes().route("user_service_route", r -> r.path("/api/users/**").uri("http://localhost:8081")) // 转发到用户服务.route("order_service_route", r -> r.path("/api/orders/**").uri("http://localhost:8082")) // 转发到订单服务.build();}
}

或者使用更简洁的 application.yml 配置:

spring:cloud:gateway:routes:- id: user-serviceuri: http://localhost:8081predicates:- Path=/api/users/**- id: order-serviceuri: http://localhost:8082predicates:- Path=/api/orders/**

类比:就像交警根据车牌或目的地,将不同类型的车辆引导至不同的高速入口。

2. 过滤器(Filter)—— 像安检站和ETC通道

过滤器可以在请求被路由前或后执行逻辑,比如身份验证、日志记录、修改请求头等。

自定义全局过滤器:实现访问日志记录
@Component
@Order(-1) // 优先级最高
public class LoggingGlobalFilter implements GlobalFilter {private static final Logger log = LoggerFactory.getLogger(LoggingGlobalFilter.class);@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest request = exchange.getRequest();String path = request.getURI().getPath();String method = request.getMethodValue();log.info("[Gateway] 接收到请求: {} {}, 客户端IP: {}", method, path, getClientIp(exchange));// 继续执行后续过滤器链return chain.filter(exchange).then(Mono.fromRunnable(() -> {ServerHttpResponse response = exchange.getResponse();log.info("[Gateway] 响应完成: {} {}, 状态码: {}", method, path, response.getStatusCode());}));}private String getClientIp(ServerWebExchange exchange) {// 省略IP获取逻辑return "192.168.1.100";}
}

类比:这就像进入城市前的安检站,记录每辆车的信息,并在离开时记录其状态。

使用内置过滤器:添加请求头
spring:cloud:gateway:routes:- id: user-serviceuri: http://localhost:8081predicates:- Path=/api/users/**filters:- AddRequestHeader=Authorization, Bearer abc123xyz- RewritePath=/api/(?<segment>.*), /$\{segment}

RewritePath 过滤器会将 /api/users/1 重写为 /users/1 再转发,而 AddRequestHeader 则自动携带认证信息。

3. 断言(Predicate)—— 像限行政策决定谁可以通行

断言决定了一个请求是否符合某条路由的匹配条件。除了 Path,还可以基于主机、时间、请求头等进行判断。

predicates:- Path=/api/users/**- Header=Authorization, Bearer .*  # 必须携带Bearer Token- After=2023-10-01T00:00:00+08:00 # 只在某个时间之后生效

类比:就像城市规定“新能源车可通行”、“外地车限行”,网关通过断言对请求进行精细化筛选。

要点总结

  1. Spring Cloud Gateway 是响应式架构,基于 Spring WebFlux 和 Project Reactor,性能远超传统的 Zuul 1.x。
  2. 三大核心组件:Route(路由)、Predicate(断言)、Filter(过滤器),三者协同工作,构成完整的请求处理流水线。
  3. 强大的扩展性:支持自定义 Predicate 和 Filter,可轻松集成限流(如结合 Redis + Lua)、熔断、鉴权等高级功能。

掌握 Spring Cloud Gateway,就等于掌握了微服务世界的“交通指挥艺术”。合理设计网关规则,能让整个系统更加安全、高效、可控。

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

相关文章:

  • 【大模型评估】大模型评估框架 HELM(Holistic Evaluation of Language Models)全解析:原理、工具与实践
  • 做自媒体视频搬运网站网站做友链有行业要求吗
  • Jarvis 算法
  • [Linux基础——Lesson6.编译器gcc/g++以及动静态库的认识]
  • 【ROS2】快速创建一个包
  • Markdown——2.LaTeX数学公式
  • 网站系统建设合同范本网站建设相关技术
  • 做网站准备的资料竞猜世界杯
  • Python 开发工具,最新2025 PyCharm 使用
  • 新公司注册在哪个网站p2p网站建设教程
  • 2008 年真题配套词汇单词笔记(考研真相)
  • 增强版 bash “zsh“
  • 图数据库:基于历史学科的全球历史知识图谱构建,使用Neo4j图数据库实现中国历史与全球历史的关联查询。
  • conda建立虚拟环境,并在jupyter notebook中显示,查看与已安装包是否冲突
  • 美食网站策划书新网站如何让百度收录
  • [创业之路-642]:新质生产力、硬科技与数字经济深度融合
  • 今日分享 浮点数二分
  • DataTool.vip官网入口 - 多平台视频与音频免费下载器工具
  • 文心雕龙:DIFY 工作流驱动的Word自动化生成与规范排版方案
  • asp sql做学生信息网站中国建设银行演示网站
  • windows10 系统添加第二块硬盘(解决硬盘盘符丢失问题)
  • java-代码随想录第48天|739. 每日温度、496.下一个更大元素 I、503.下一个更大元素II
  • 在嘉立创的泰山派上也能运行Easysearch
  • JSP 点击量统计
  • 应用网站如何做外贸网站建设哪里做得好
  • Kubernetes证书管理实战:cert-manager部署与CRD导出
  • [Java]PTA: jmu-Java-02基本语法-08-ArrayList入门
  • 网站建设背景及目的搜索优化的培训免费咨询
  • 2012 年真题配套词汇单词笔记(考研真相)
  • Ubuntu20.04 按照飞浆paddle 3.2遇到的问题