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

Spring Cloud Gateway实战:微服务API网关从零到一

前言

Spring Cloud Gateway 是 Spring 官方推出的 API 网关,基于 WebFlux 实现,性能卓越。本文带你从零搭建一个生产级的微服务 API 网关。

一、核心概念

  • Route(路由):网关的基本构建块,包含 ID、目标 URI、Predicate、Filter
  • Predicate(断言):匹配请求条件(路径、Header、参数等)
  • Filter(过滤器):对请求进行前置/后置处理(鉴权、限流、日志等)

二、快速搭建

<!-- pom.xml -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency># application.yml
server:port: 8080spring:application:name: api-gatewaycloud:gateway:routes:- id: user-serviceuri: lb://user-servicepredicates:- Path=/api/users/**filters:- StripPrefix=1- id: order-serviceuri: lb://order-servicepredicates:- Path=/api/orders/**filters:- StripPrefix=1discovery:locator:enabled: true  # 自动发现服务

三、自定义全局过滤器(JWT 鉴权)

@Component
public class AuthGlobalFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange,GatewayFilterChain chain) {String path = exchange.getRequest().getPath().value();// 白名单路径跳过鉴权if (path.startsWith("/api/auth/login") ||path.startsWith("/api/auth/register")) {return chain.filter(exchange);}String token = exchange.getRequest().getHeaders().getFirst("Authorization");if (token == null || !token.startsWith("Bearer ")) {exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}// 验证 JWT(简化示例)try {String jwt = token.substring(7);Claims claims = Jwts.parser().setSigningKey("secret-key").parseClaimsJws(jwt).getBody();String userId = claims.getSubject();ServerHttpRequest request = exchange.getRequest().mutate().header("X-User-Id", userId).build();return chain.filter(exchange.mutate().request(request).build());} catch (Exception e) {exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}}@Overridepublic int getOrder() { return -100; }
}

四、自定义 GatewayFilter(限流)

@Component
public class RateLimitFilter implements GatewayFilter, Ordered {private final RateLimiter rateLimiter = RateLimiter.create(100);@Overridepublic Mono<Void> filter(ServerWebExchange exchange,GatewayFilterChain chain) {if (!rateLimiter.tryAcquire()) {exchange.getResponse().setStatusCode(HttpStatus.TOO_MANY_REQUESTS);return exchange.getResponse().setComplete();}return chain.filter(exchange);}@Overridepublic int getOrder() { return 0; }
}# 在路由中使用自定义过滤器
spring.cloud.gateway.routes[0].filters:- name: RateLimitargs:redis-rate-limiter.replenishRate: 10redis-rate-limiter.burstCapacity: 20

五、跨域配置

@Configuration
public class CorsConfig {@Beanpublic CorsWebFilter corsWebFilter() {CorsConfiguration config = new CorsConfiguration();config.addAllowedOrigin("*");config.addAllowedHeader("*");config.addAllowedMethod("*");config.setAllowCredentials(true);UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration("/**", config);return new CorsWebFilter(source);}
}

六、网关 vs Nginx

# Nginx:反向代理 + 负载均衡
# 适合:静态资源、SSL 终止、四层/七层负载均衡# Spring Cloud Gateway:业务网关
# 适合:动态路由、JWT 鉴权、限流、熔断、灰度发布# 生产推荐:Nginx(前置)+ Gateway(后置)
# 请求链路:Client → Nginx → Gateway → Microservice

总结

Spring Cloud Gateway 是微服务架构的统一入口。核心要点:基于 WebFlux 高性能非阻塞、断言灵活匹配路由、全局过滤器实现统一鉴权、配合 Nginx 构建多层网关架构。

觉得有帮助请点赞收藏!有问题欢迎评论区交流 🚀

http://www.jsqmd.com/news/598358/

相关文章:

  • Windows安卓兼容新方案:轻量级跨平台运行工具APK Installer解析
  • 电容充放电的5个常见误区:为什么你的电路总是不按预期工作?
  • 从PTA题目到项目实战:用Python和C语言两种思路重构‘插入排序’
  • 李慕婉-仙逆-造相Z-Turbo 生成Matlab算法脚本:从数学公式到可执行代码
  • Gemma-3-12b-it开源模型生态整合:与LangChain/RAG本地知识库联动
  • WinThumbsPreloader:让Windows图片预览提速80%的缓存优化工具
  • Rust离线安装完整指南:如何高效配置无网络环境的Rust开发环境
  • Qwen3-14B后端开发进阶:高并发场景下的API设计与优化
  • 最新全开源礼品代发系统源码_电商快递代发_一件代发系统
  • GModPatchTool终极指南:一键解决Garry‘s Mod浏览器与启动问题
  • XXMI Launcher:多游戏模型管理平台完全指南
  • 架构重构的技术
  • 别再纠结了!手把手教你用FreeSWITCH 1.10 + Verto模块搭建WebRTC智能外呼系统(含完整配置文件)
  • 实测560Mbps!基于ZYNQ的SFP光口以太网性能优化全记录(含PetaLinux配置)
  • DS4Windows终极指南:让PlayStation手柄在PC上释放全部潜能
  • 计算机助力城市规划新突破
  • 一键净化Windows系统:Win11Debloat完整优化指南免费获取
  • 解锁专业显示控制:ColorControl让NVIDIA显卡和LG电视完美协作
  • 3步解锁星露谷无限可能:SMAPI模组加载器完全攻略
  • Flet实战:教你用Python把Todo应用打包成exe可执行文件(含界面美化技巧)
  • OpenClaw怎么部署?2026年阿里云3分钟小白速成搭建及大模型API Key、Skill集成教程
  • 实战指南:基于快马平台用PostgreSQL的JSONB字段构建灵活的产品管理系统
  • OpenClaw数据预处理:利用Kimi-VL-A3B-Thinking自动标注训练样本
  • 拯救你的网站兼容性:手把手教你用heic2any解决苹果图片上传问题
  • AI结对编程:让快马AI助手帮你编写和解读复杂LaTeX排版代码
  • 7步精通Fooocus:从零基础到创意实践
  • 基于改进鲸鱼算法优化支持向量机(GSWOA-SVR)的多变量时序预测 (多输入单输出)附Matlab代码
  • 专业显示控制新纪元:ColorControl如何突破硬件限制实现精准显示调校
  • 性能实测:登临Goldwasser V2加速卡跑YOLOv5s,对比CPU看速度提升多少?
  • 新手福音:用快马平台ai生成centos7可视化安装教程,告别复杂命令行