网关限流-路由维度|学习笔记

简介: 快速学习网关限流-路由维度

开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第三阶段网关限流-路由维度】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/685/detail/11895


网关限流-路由维度

内容介绍

一、网关限流

二、代码编写

三、限流模拟


一、网关限流

网关是所有请求的公共入口,所以可以在网关进行限流,而且限流的方式也很多,我们本次采用前面学过的 Sentinel 组件来实现网关的限流。Sentinel 支持对SpringCloud Gateway、Zuul 等主流网关进行限流。

image.png

Sentinel 网关限流公共模块(API Gateway Adapter Common):

请求属性解析   网关规则管理   网关规则检查

调用参数组装   自定义 API 分组管理   API 路径匹配

Sentinel 网关支持的网关:NETFLIXZuul 和 Spring Cloud Gateway  

从1.6.0版本开始,Sentinel 提供了 SpringCloud Gateway 的适配模块,可以提供两种资源维度的限流方式。

route 维度:

即在 Spring 配置文件中配置的路由条目,资源名为对应的 routeld,可以具体到某一路由上限流

e自定义 API 维度:

用户可以利用 Sentinel 提供的 API 来自定义一些 API 分组,可以以 API 划分分组。


二、代码编写

(1)导入依赖

I<dependency>

<groupId>com.alibaba.csp</groupId>

<artifactId>sentinel-spring-cloud-gateway-adapter</

artifactId>

</dependency>

(2)编写配置类

基于 Sentinel 的 Gateway 限流是通过其提供的 Filter 来完成的,使用时只需注入对应的 SentinelGatewayFilter

实例以及 SentinelGatewayBlockExceptionHandler 实例即可。

@Configuration

public class GatewayConfiguration

private final List viewResolvers;

private final ServerCodecConfigurer serverCodecConfigurer

;

// 初始化一个限流的过滤器

@Bean

@Order(Ordered.HIGHEST_PRECEDENCE)

public GlobalFilter sentinelGatewayFilter()

return new SentinelGatewayFilter();

// 配置初始化的限流参数

@PostConstruct

public void initGatewayRules() (

Set rules = new HashSet<>();

rules.add(

newGatewayF1owRule( resource: "product_route") //资源名称,对应路由 id

.setCount(1) // 限流國值

.setIntervalSec1)//统计时间窗口,单位是秒,默认是 1秒

);

GatewayRuleManager.loadRules(rules);

// 配置限流的异常处理器

@Bean

@Order (Ordered.HIGHEST PRECEDENCE)

Public SentinelGatewayBlockExceptionHandler

sentinelGatewayBlockExceptionHandler(

return new SentinelGatewayBlockExceptionHandler

(viewResolvers, serverCodecConfigurer);

// 自定义限流异常页面

@PostConstruct

public void initBlockHandlers() (

BlockRequestHandler blockRequestHandler = new BlockRequestHandler((

public Mono handleRequest(ServerWebExchange serverWebExchange, Throwable throwable) (Map map = new HashMap<>();

map.put("code",0);

map.put("message",“接口被限流了");

return ServerResponse.status(HttpStatus.OK).

contentType(MediaType.APPLICATION_JSON_UTF8).

body (BodyInserters.fromobject(map));

GatewayCallbackManager.setBlockHandler(blockRequestHandler);

三、限流模拟

创建 orderApplication,快速刷新查看效果,发现已经被限流了。

再访问 order,刷新后没有限流,针对第一个维度,就做完了。

相关文章
|
5天前
|
算法 NoSQL API
SpringCloud&Gateway网关限流
SpringCloud&Gateway网关限流
42 7
|
5天前
|
Linux
Linux网关路由配置
Linux网关路由配置
17 0
|
6月前
|
NoSQL 算法 Java
面试官:网关如何实现限流?
面试官:网关如何实现限流?
347 2
面试官:网关如何实现限流?
|
5天前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
128 0
|
5天前
|
监控 网络协议 安全
【亮剑】当设备IP能ping通但无法上网时,可能是DNS解析、网关/路由设置、防火墙限制、网络配置错误或ISP问题
【4月更文挑战第30天】当设备IP能ping通但无法上网时,可能是DNS解析、网关/路由设置、防火墙限制、网络配置错误或ISP问题。解决步骤包括检查网络配置、DNS设置、网关路由、防火墙规则,以及联系ISP。预防措施包括定期备份配置、更新固件、监控网络性能和实施网络安全策略。通过排查和维护,可确保网络稳定和安全。
|
5天前
|
网络协议 算法 安全
【专栏】硬核干货:BGP(边界网关协议)是自治系统间交换路由信息的关键协议,用于大型网络的高效路由选择
【4月更文挑战第28天】BGP(边界网关协议)是自治系统间交换路由信息的关键协议,用于大型网络的高效路由选择。它基于路径向量算法,通过TCP连接建立邻居关系,交换并选择最优路径。BGP支持丰富的路由属性和多种消息类型,允许灵活的路由控制。配置与应用包括启用BGP、配置邻居、路由宣告、过滤及社区属性使用。虽然BGP具备强大路由控制和可扩展性,但其配置复杂,存在安全挑战。理解BGP对于网络管理和优化至关重要。
|
5天前
|
Java 网络架构 微服务
SpringCloud GateWay网关-学习笔记
SpringCloud GateWay网关-学习笔记
35 0
|
5天前
|
负载均衡 Java API
SpringCloud - Zuul路由网关使用详解
SpringCloud - Zuul路由网关使用详解
135 0
|
6月前
|
监控 API Nacos
微服务轮子项目(19) -Alibaba Sentinel限流熔断(网关流控)
微服务轮子项目(19) -Alibaba Sentinel限流熔断(网关流控)
76 0
|
6月前
|
前端开发 应用服务中间件 API
简单明了!网关Gateway路由配置filters实现路径重写及对应正则表达式的解析
简单明了!网关Gateway路由配置filters实现路径重写及对应正则表达式的解析
134 0