sentinel整合nacos在gateway中实现限流

sentinel整合nacos在gateway中实现限流

一、应用层面完成网关整合nacos和sentinel实现限流

前沿

启动nacos与sentinel的jar的启动,这里不细讲

sentinel官网 https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5
sentinel 下载地址 https://github.com/alibaba/Sentinel/releases
nacos官网 https://nacos.io/zh-cn/docs/deployment.html
nacos下载地址https://github.com/alibaba/nacos/releases

1.1 导报

在gateway中导入所需的jar

 <!--网关限流3组件--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId><version>2.2.1.RELEASE</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2.2.1.RELEASE</version></dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId><version>1.8.0</version></dependency>

集成nacos的注册中心与配置中心

   <!--注册中心--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.5.RELEASE</version></dependency><!--配置中心--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2.2.5.RELEASE</version></dependency>
1.2 配置文件(仅展示整合sentinel部分)
# 应用名称
spring:cloud:sentinel:transport:# sentinel的连接地址dashboard: localhost:7777# sentinel与服务的通信端口,只要不冲突就行port: 8720# 取消控制台懒加载eager: true# 获取sentinel配置在nacos的文件信息datasource:ds1:nacos:# nacos的地址server-addr: ${spring.cloud.nacos.discovery.server-addr}# nacos的文件名称data-id: gateway-flow-rule-sentinel# 在nacos的命名空间  注意public空间下不能设置为public否则获取不到配置,如果在public就不写此行namespace: 49dc14c4-e3a6-48de-a773-6fdda300424f   # 分组名称group-id: DEFAULT_GROUP# 文件类型data-type: json# 规则类型: com.alibaba.cloud.sentinel.datasource.RuleType# FlowRule 就是限流规则rule-type: gw-flowds2:nacos:server-addr: ${spring.cloud.nacos.discovery.server-addr}data-id: gateway-flow-rule-api-sentinelnamespace: 49dc14c4-e3a6-48de-a773-6fdda300424f   # 注意public空间下不能显示的设置为public否则获取不到配置group-id: DEFAULT_GROUPdata-type: json# 规则类型: com.alibaba.cloud.sentinel.datasource.RuleType# FlowRule 就是限流规则rule-type: gw-api-group
1.3 编写配置类
@Slf4j
@Configuration
public class GatewayConfiguration {private final List<ViewResolver> viewResolvers;private final ServerCodecConfigurer serverCodecConfigurer;public GatewayConfiguration(ObjectProvider<List<ViewResolver>> viewResolversProvider,ServerCodecConfigurer serverCodecConfigurer) {this.viewResolvers = viewResolversProvider.getIfAvailable(Collections::emptyList);this.serverCodecConfigurer = serverCodecConfigurer;}@Bean@Order(Ordered.HIGHEST_PRECEDENCE)public SentinelGatewayBlockExceptionHandler sentinelGatewayBlockExceptionHandler() {// Register the block exception handler for Spring Cloud Gateway.return new SentinelGatewayBlockExceptionHandler(viewResolvers, serverCodecConfigurer);}@Bean@Order(Ordered.HIGHEST_PRECEDENCE)public GlobalFilter sentinelGatewayFilter() {return new SentinelGatewayFilter();}
}
1.4 编写返回自定义限流拦截信息(如果不写此类返回就是429)
@Configuration
public class SentinelGatewayConfig {public SentinelGatewayConfig() {GatewayCallbackManager.setBlockHandler(new BlockRequestHandler() {@Overridepublic Mono<ServerResponse> handleRequest(ServerWebExchange exchange, Throwable t) {R error = R.error(500, "限流啦 别在试啦");String errorStr = JSON.toJSONString(error);Mono<ServerResponse> just = ServerResponse.ok().body(Mono.just(errorStr), String.class);return just;}});}
}

注:如果启动后sentinel的画面没有API菜单,那就在启动类main函数里加上

  // 添加此代码,在Sentinel控制台中做判断使用System.setProperty("csp.sentinel.app.type", "1");
1.5 限流json文件

文件位置
在这里插入图片描述

gateway-flow-rule-sentinel的配置内容

[{"resource": "macro-member","resourceMode": 0,"count": 1,"intervalSec": 60},{"resource": "macro-member-api","resourceMode": 1,"count": 2,"intervalSec": 60}]

gateway-flow-rule-api-sentinel

[{"apiName": "macro-member-api","predicateItems": [{"pattern": "/api/member/sysUser/getUsers"},{"pattern": "/imooc/ecommerce-nacos-client/**","matchStrategy": 1},{"pattern": "/api/member/sysUser/getUserByName"}]
}]
1.6 测试

访问效果是达到了限流的目的
在这里插入图片描述
nacos的限流规则更改,sentinel控制台能马上感应到

在这里插入图片描述

二、sentinel限流原理

Sentinel中的令牌桶算法采用固定窗口算法,将时间窗口分成若干个固定长度的小窗口,并在每个小窗口开始时向令牌桶中添加一定数量的令牌。每次请求需要获取一个令牌才能执行,如果令牌桶中的令牌数量不足,则请求将被拒绝。通过调整每个小窗口的长度和每次添加的令牌数量,可以控制限流的速率

配置参数的含义

FIELD说明默认值
resource资源名,资源名是限流规则的作用对象
count限流阈值
grade限流阈值类型,QPS 模式(1)或并发线程数模式(0)QPS 模式
limitApp流控针对的调用来源default,代表不区分调用来源
strategy调用关系限流策略:直接、链路、关联根据资源本身(直接)
controlBehavior流控效果(直接拒绝/WarmUp/匀速+排队等待),不支持按调用关系限流直接拒绝
resource资源名,资源名是限流规则的作用对象直接拒绝
resourceMode限流方式 0-服务限流 1-分组限流
intervalSec统计时间窗口,单位是秒1
matchStrategy参数值的匹配策略目前支持精确匹配(PARAM_MATCH_STRATEGY_EXACT)、子串匹配(PARAM_MATCH_STRATEGY_CONTAINS)和正则匹配(PARAM_MATCH_STRATEGY_REGEX)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/701111.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring中事务失效的场景

一:异常捕获处理 事务通知只有捉到了目标抛出的异常,才能进行后续的回滚处理,如果目标自己处理掉异常,事务通知无法知悉 解决 在catch块添加throw new RuntimeException(e)抛出 二: 抛出检查异常 原因: Spring默认只会回滚非检查异常 解决: 配置rollbackFor属性 Transa…

使用uniapp实现小程序获取wifi并连接

一、背景 因业务需求&#xff0c;需要在小程序实现发现wifi和连接wifi。但由于Andriod和IOS有差异&#xff0c;所以实现起来有所区别。 先看官方文档 https://developers.weixin.qq.com/miniprogram/dev/framework/device/wifi.html 把连接基础流程了解后&#xff0c;发现二者流…

LeetCode题练习与总结:最接近的三数之和

一、题目 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数&#xff0c;使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 二、解题思路 解决这个问题的关键在于找到一个有效的算法来遍历数组并找到三…

车载电子电器架构 —— 电气架构开发计划

车载电子电器架构 —— 电气架构开发计划 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明…

实现KingSCADA系统按钮弹窗出现位置随点击位置变化。

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 在用KingSCADA做项目时&#xff0c;当我们点击不同的控制按钮&#xff0c;都可以弹出对应的控制弹窗。 在常规不做设置的情况下弹窗都是出现在固定的位置&#xff0c;要么一直出现在左上角&#xff0c;要么一直出现在…

【Java】常用实用类及java集合框架(实验六)

目录 一、实验目的 二、实验内容 三、实验小结 3.1 常用实用类 3.2 Java集合框架 一、实验目的 1、掌握java常用类的方法 2、掌握String类与数值类型数据的相互转化 3、掌握正则表达式的应用 4、掌握常用集合的创建和操作方法 二、实验内容 1、菜单的内容如下&#x…

南邮概率统计与随机过程练习册答案

**南京邮电大学** **概率统计与随机过程练习册答案简介** 本文档是一份精心整理的南京邮电大学概率统计与随机过程课程的练习册答案集。它旨在为学习该课程的学生提供一个详尽的解题参考,帮助他们更好地理解和掌握概率论与统计学的基本概念和方法。 **内容概览:** - **章节…

抖音视频评论数据提取软件|抖音数据抓取工具

一、开发背景&#xff1a; 在业务需求中&#xff0c;我们经常需要下载抖音视频。然而&#xff0c;在网上找到的视频通常只能通过逐个复制链接的方式进行抓取和下载&#xff0c;这种操作非常耗时。我们希望能够通过关键词自动批量抓取并选择性地下载抖音视频。因此&#xff0c;为…

git 拉取远程分支到本地

背景&#xff1a; 我的 github 上的远程仓库上除了 main 分支外还提交了好几个别的分支&#xff0c;现在我换机器了&#xff0c;git clone 原仓库后只剩 main 分支&#xff0c;我要把其他分支拉下来到本地。 1. 查看所有远程remote分支 git branch -r 比如我这里&#xff1…

深入浅出:探究过完备字典矩阵

在数学和信号处理的世界里&#xff0c;我们总是在寻找表达数据的最佳方式。在这篇博文中&#xff0c;我们将探讨一种特殊的矩阵——过完备字典矩阵&#xff0c;这是线性代数和信号处理中一个非常有趣且实用的概念。 什么是过完备字典矩阵&#xff1f; 首先&#xff0c;我们先…

LeetCode 2610.转换二维数组

给你一个整数数组 nums 。请你创建一个满足以下条件的二维数组&#xff1a; 二维数组应该 只 包含数组 nums 中的元素。 二维数组中的每一行都包含 不同 的整数。 二维数组的行数应尽可能 少 。 返回结果数组。如果存在多种答案&#xff0c;则返回其中任何一种。 请注意&…

多数元素

169. 多数元素 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&…

docker用法

首先需要去docker官网注册你的账号&#xff0c;记住账号名称和密码&#xff1b; 然后在本地执行&#xff1a; docker login登录OK。 把ubuntu下载到本地&#xff1a; sudo docker pull ubuntusudo docker images输出&#xff1a; REPOSITORY TAG …

认识K8S

K8S K8S 的全称为 Kubernetes (K12345678S) 是一个跨主机容器编排工具 作用 用于自动部署、扩展和管理“容器化&#xff08;containerized&#xff09;应用程序”的开源系统。 可以理解成 K8S 是负责自动化运维管理多个容器化程序&#xff08;比如 Docker&#xff09;的集群…

278.【华为OD机试真题】寻找最优的路测线路(二分查找—JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-寻找最优的路测线路二.解题思路三.题解代码Pyt…

unity学习(40)——创建(create)角色脚本(panel)——UI

1.点击不同的头像按钮&#xff0c;分别选择职业1和职业2&#xff0c;create脚本中对应的函数。 2.调取inputfield中所输入的角色名&#xff08;限制用户名长度为7字符&#xff09;&#xff0c;但愿逆向的服务器可以查重名&#xff1a; 3.点击头衔&#xff0c;显示选择的职业&a…

【小程序】应用程序编程接口能力汇总——网络API(一)

ty.request 获取网络请求任务对象 RequestTask 参数 Object object 发起 HTTPS 网络请求的回调函数 回调参数 Object res 属性类型默认值必填说明urlstring是开发者服务器接口地址datastring否请求的参数headerany否设置请求的 header&#xff0c;header 中不能设置 Refe…

第二十篇文章——谈谈我的感受

一.契机 很早以前&#xff0c;我就使用了CSDN&#xff0c;并从很多大佬的文章中学到了很多的知识&#xff0c;当我再次从C语言开始&#xff0c;从走编程之路的时候&#xff0c;我思考&#xff1a;为什么不能把我再次学习的所思所感记录下来呢&#xff1f;因此&#xff…

vite 项目提示 Buffer is not defined 问题解决

问题 在 vite 搭建的 vue3 项目中使用 Buffer 对象报错 Buffer is not defined 原因 出现这个问题的原因是因为页面运行在浏览器中&#xff0c;而浏览器中并没有 Buffer 对象&#xff0c;Buffer 对象是 Node 中的。 解决方法 1、安装 buffer 插件 npm install buffer 2、…

SpringBootWeb请求响应

SpringBootWeb请求响应 这里写目录标题 SpringBootWeb请求响应前言1. 请求1.1 Postman1.1.1 介绍1.1.2 安装 1.2 简单参数1.2.1 原始方式1.2.2 SpringBoot方式1.2.3 参数名不一致 1.3 实体参数1.3.1 简单实体对象1.3.2 复杂实体对象 1.4 数组集合参数1.4.1 数组1.4.2 集合 1.5 …