尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Spring Cloud Gateway

Spring Cloud Gateway
📅 发布时间:2026/6/18 17:37:47

zuul终究还是被时代淘汰了,spring基本上也逐渐放弃了Netflix平台,自己搞起了gateway。这不得不聊起一个人 Spencer Gibb,他是zuul的核心开发,带领一群有志青年,放弃zuul,转战spring cloud gateway。

应用搭建

其maven依赖如下:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>

之后,只需要写个简单的spring boot程序就可以了,与zuul不同的是,gateway没有@Enable开头的开关:

@SpringBootApplicationpublicclassGatewayApplication{publicstaticvoidmain(String[]args){SpringApplication.run(GatewayApplication.class,args);}}

这就是gateway与zuul设计哲学的不同。

网关配置

光完成上述代码肯定不够,因为没有配置转发。以下是配置文件的一个例子:

server:port:80# 网关端口spring:cloud:gateway:routes:-id:user_route# 直接写死目标服务的 IP 和端口uri:http://127.0.0.1:8001predicates:-Path=/user/**

之后就可以正常转发了。

谓词配置

配置中的predicates是gateway的谓词,这部分可谓非常复杂了。上述例子里用的是路径谓词。此外我还整理了其他比较好用的谓词.

谓词名称用途典型场景
Path匹配请求路径将/api/转发给某个服务
Query匹配请求参数根据 URL 中的参数(如版本号)分流
Header匹配请求头根据User-Agent或自定义 Header 鉴权
Method匹配请求方法只允许 GET 或 POST 请求通过
Cookie匹配 Cookie针对特定用户群体的灰度发布
Host匹配域名基于域名的路由(如*.abc.com)
RemoteAddr匹配客户端 IP黑白名单、IP 限流
After/Before匹配时间活动期间开启特定页面,或维护窗口

过滤器

除了谓词以外,gateway还提供了过滤器配置,以达到更精致的网关控制。以下是常见的过滤器:

分类过滤器名称 (Filter Name)核心作用
请求处理AddRequestHeader给请求头添加自定义信息
AddRequestParameter给请求添加参数
RewritePath重写请求路径(最常用)
StripPrefix截断请求路径前缀
RequestRateLimiter请求限流(令牌桶算法)
响应处理AddResponseHeader给响应头添加信息
DedupeResponseHeader去除响应头中重复的值
SetStatus修改返回的状态码
路由增强Hystrix熔断保护(旧版)
RequestSize限制请求包大小
Retry失败自动重试

转发实现

gateway是怎么转发的?gateway是基于WebFlux技术的。gateway写了一个RoutePredicateHandlerMapping,该类实现了HandlerMapping接口,所以充当了传统servlet里控制器的角色。核心方法在lookupRoute里。在追踪gateway源码时我们可以记录一下堆栈的变化。

  1. 线程Thread[reactor-http-nio-2,5,main]

at org.springframework.cloud.gateway.handler.RoutePredicateHandlerMapping.lookupRoute(RoutePredicateHandlerMapping.java:128)
at org.springframework.cloud.gateway.handler.RoutePredicateHandlerMapping.getHandlerInternal(RoutePredicateHandlerMapping.java:87)
at org.springframework.web.reactive.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:181)

  1. 线程Thread[reactor-http-nio-2,5,main]

at org.springframework.cloud.gateway.handler.FilteringWebHandler.handle(FilteringWebHandler.java:77)
at org.springframework.web.reactive.result.SimpleHandlerAdapter.handle(SimpleHandlerAdapter.java:45)
at org.springframework.web.reactive.DispatcherHandler.invokeHandler(DispatcherHandler.java:161)

  1. 线程Thread[reactor-http-nio-2,5,main]

at org.springframework.cloud.gateway.filter.NettyRoutingFilter.filter(NettyRoutingFilter.java:104)
at org.springframework.cloud.gateway.handler.FilteringWebHandler$GatewayFilterAdapter.filter(FilteringWebHandler.java:138)
at org.springframework.cloud.gateway.filter.OrderedGatewayFilter.filter(OrderedGatewayFilter.java:44)

在NettyRoutingFilter这个类里终于找到了转发的代码了,我只贴一行代码,不过这行代码可够长的了:

Flux<HttpClientResponse>responseFlux=this.httpClient.headers(headers->{headers.add(httpHeaders);if(preserveHost){Stringhost=request.getHeaders().getFirst(HttpHeaders.HOST);headers.add(HttpHeaders.HOST,host);}else{// let Netty set it based on hostnameheaders.remove(HttpHeaders.HOST);}}).request(method).uri(url).send((req,nettyOutbound)->{if(log.isTraceEnabled()){nettyOutbound.withConnection(connection->log.trace("outbound route: "+connection.channel().id().asShortText()+", inbound: "+exchange.getLogPrefix()));}returnnettyOutbound.send(request.getBody().map(dataBuffer->((NettyDataBuffer)dataBuffer).getNativeBuffer()));}).responseConnection((res,connection)->{// 省略很多很多代码。。。。。。。returnMono.just(res);});

相关新闻

  • UDP-酮半乳糖二钠盐——赋能前沿糖基化研究的核心工具分子
  • 把织物上的“轻微脏污”抓出来:客户下单50台
  • Java毕设项目:基于SpringBoot+Vue的二手数码产品交易平台的开发与实现(源码+文档,讲解、调试运行,定制等)

最新新闻

  • LevelDB dumpfile工具深度解析:揭秘Google高性能键值存储的底层数据格式
  • AI驱动Web自动化测试:Stagehand框架原理、实战与避坑指南
  • 天津钻石回收门店排行榜|禹竞名奢汇稳居榜首,本地变现首选靠谱商家 - 名奢变现站
  • 免费开源GUI原型设计终极指南:Pencil Project从入门到精通
  • 2026太阳镜品牌推荐榜:品质与格调兼具的十大之选 - 品牌评测官
  • 高效Windows系统优化工具Win11Debloat:三步实现系统清理与性能提升

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号