首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SpringCloud-Gateway

SpringCloud-Gateway

作者头像
用户1750537
发布2025-08-29 09:09:06
发布2025-08-29 09:09:06
1230
举报
  1. 什么是gateway,它可以起到什么样的作用? gateway是spring cloud提供的网关技术,提供功能如下:路由,安全,监控/埋点,限流

gateway中的核心元素:

route:路由,为请求匹配到对应的路由

predicate:java8提供的一个函数,是路由的匹配条件

filter:过滤器,在请求发出前后进行一些业务上的处理

原理图:

在这里插入图片描述
在这里插入图片描述

过程:客户端请求 -> Gateway Handler Mapping -> Gateway Web Handler -> 前置过滤器链 -> 发出请求 -> 后置过滤器链

  1. gateway作为网关的一种,它相对其它网管的优势在哪里?

优点:简单易用,维护性强

缺点:性能相对zuul2,openrestry,nginx,kong来说是最差的

网关选型:轻量级的网关系统还是选gateway,出现性能瓶颈可以通过多加几台服务器的方式解决。

参考博文:

https://www.cnblogs.com/cat520/articles/10102762.html

https://www.zhihu.com/question/280850489/answer/909248442

不使用kong,openrestry作为网关的原因?

增加项目的复杂度,像openrestry使用的是lua脚本开发的。鉴权,监控都使用lua开发,增加项目的难度。

不使用zuul2的原因?没有文档,高并发时出错率较高

  1. gateway如何实现路由转发的功能? 通过在application.property添加配置的方式就可以做到

predicates:用于匹配的路径

url:转发到的路径

StripPrefix=4:省略4段路径,例,/pacz_core/do/app/pacz-customer/省略为/

PrefixPath=/pacz-customer:添加前缀/pacz-customer,最后的path为:/pacz-customer/**

加上uri,最后的请求url为:http://pacz-core-customer-stg11.paic.com.cn/pacz-customer/**

例:

spring.cloud.gateway.routes[7].id=route7 spring.cloud.gateway.routes[7].predicates[0]=Path=/pacz_core/do/app/pacz-customer/** spring.cloud.gateway.routes[7].uri=http://pacz-core-customer-stg11.paic.com.cn spring.cloud.gateway.routes[7].filters[0]=StripPrefix=4 spring.cloud.gateway.routes[7].filters[1]=PrefixPath=/pacz-customer 原理:

使用gateway中的断言工厂实现,上述的例子使用的是path断言工厂实现,这只是多种断言方式中的一种,其它的如下

Query路由断言工厂:通过请求的参数进行匹配

Method路由断言工厂:HTTP请求方式进行匹配

Header路由断言工厂:通过请求头中的key,value进行匹配

当然也可以定义自己的断言工厂,继承AbstractRoutePredicateFactory, 重写apply方法。具体可参考网络上的其它资源。

  1. gateway如何实现接口限流? gateway中的接口限流的方式十分简单:定义bean对象+application.property文件中配置限流信息

定义bean对象:定义的bean对象为KeyResolver, 限流的颗粒度可以为:ip地址,用户id,某些接口

例如:

//这里是通过请求中的hostname进行限流的,当然可以换成其它的 @Configuration public class BeanConfig { @Bean public KeyResolver ipKeyResolver() { return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getHostName()); } } filter的name必须是RequestRateLimiter replenishRate:每秒钟生成的令牌数 burstCapacity:每秒中最多消耗的令牌数 key-resolver:使用sqEL方式引用bean filters:

  • name: RequestRateLimiter args: redis-rate-limiter.replenishRate: 10 redis-rate-limiter.burstCapacity: 20 key-resolver: “#{@ipKeyResolver}”
  1. gateway如何实现接口熔断? 通过配置全局过滤器+apollo配置的方式,可以实现热部署的接口熔断配置

全局过滤器通过实现GlobalFilter,Order接口,并重写filter方法

  1. gateway如何实现接口降级? 降级就是接口参数过滤
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档