【Sentinel的限流使用】⭐️SpringBoot整合Sentinel实现Api的限流

目录

前言

一、Sentinel下载

 二、SpringBoot 整合 Sentinel

三、流控规则

章末


前言

        小伙伴们大家好,上次使用OpenFeign时用到了 Hystrix实现熔断和限流的功能,但是发现该工具已经停止维护了,于是想到了Spring Cloud Alibaba开发的Sentinel工具,也可以实现流量控制,熔断降级,系统负载保护等

一、Sentinel下载

        项目地址:Releases · alibaba/Sentinel · GitHub

1.直接下载 jar 包,到文件下载目录层级打开命令页面

 2.使用 java -jar sentinel-dashboard-1.8.7.jar 启动sentinel 

注:sentinel默认启动使用的是 8080 端口,如果担心被占用可以指定端口号

java -jar sentinel-dashboard-1.8.7.jar --server.port=8333

3.访问管理页面

         访问 http://localhost:8333/#/login ,进到登陆页面,默认登陆用户密码都是sentinel

 二、SpringBoot 整合 Sentinel

2.1 引入依赖

        我这里制定了版本,因为用的父依赖中没有引用

        <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2.1.3.RELEASE</version></dependency>

2.2 配置信息 

spring:...cloud:sentinel:transport:#控制台地址配置dashboard: localhost:8333#传输端口port: 8719#暴露所有的端点
management:endpoints:web:exposure:include: "*"

2.3 启动类开启服务发现

        在启动类上加 @EnableDiscoveryClient 注解,打开服务发现功能

2.4 测试接口加注解@SentinelResource

    @SentinelResource@PostMapping(value = "/login")public BaseResult login(String username, String password) {UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));...return BaseResult.success();}

2.5 启动项目

        注:本地启动项目连接控制台后,发现看不到服务,可能是因为 Sentinel 本身懒加载的原因,就是说服务不被调用,sentinel 控制台是无法感知到服务的,需要手动调用一次接口刷新

        检测到服务后的界面如下:

      

三、流控规则

        3.1 基本介绍

资源名:唯一名称,默认的请求路径

针对来源:Sentinel 可以针对调用者进行限流,填写微服务名称,默认是default也就是不区分来源

阈值类型/单机阈值:

        1.QPS 每秒钟的请求数量 : 当调用该api接口的QPS到达阈值时,启动限流

        2.线程数:当调用该api的线程数达到阈值的时候,进行限流

是否集群:不需要集群

流控模式:挑默认的看下

        1.直接: api达到限流条件时,直接限流

流控效果: 

        1.快速失败 : 直接失败,抛出异常

        3.2 添加一个流控规则,限制单机阈值 QPS 为1

         3.3 注意事项

在添加流控规则的时候,可能会遇到添加失败的场景,也就是点击添加后控制台上没有显示

产生原因:可能是客户端是否使用了低版本的 fastjson,低版本的 fastjson 可能会有此问题,建议使用和 Sentinel 相关组件一致版本的 fastjson。

解决方案: 我这里升级了 fastjson 的版本之后就可以正常添加了

        <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.58</version></dependency>

        3.4 测试接口

        因为设置的是每秒支持一个请求,所以测试的时候简单实现只要快速点击请求即可实现,结果如下,因为QPS 设置为1,所以每次通过的只有一个,拒绝 QPS 指的就是被限流请求失败的,同时到控制台看下日志,也会打出限流导致的异常日志

章末

       后续再补充熔断,负载的使用,以及搭配OpenFeign使用

        好了,文章到这里就结束了~ 

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

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

相关文章

2.基础乐理-唱名的来历,简谱的构造

前置内容&#xff1a;1.唱名与记住唱名的方法 唱名的来历&#xff1a; 很久很久以前&#xff08;公元前&#xff09;各个文明开始诞生和慢慢发展&#xff0c;随着文明的发展&#xff0c;各个文明都开始出现自己的音乐&#xff0c;根据考古学家的发现在 公元前1800年&#xff…

深度学习学习日记4.8(下午)

1.softmax 函数的得出的结果是样本被预测到每个类别的概率&#xff0c;所有类别的概率相加总和等于1。使用 softmax 进行数据归一化&#xff0c;将数字转换成概率。 2.熵&#xff0c;不确定性&#xff0c;越低越好 3.KL 散度交叉熵-信息熵 预测越准&#xff0c;交叉熵越小&am…

pymilvus创建IVF_PQ向量索引

索引简介 索引的作用是加速大型数据集上的查询。 目前&#xff0c;向量字段仅支持一种索引类型&#xff0c;即只能创建一个索引。 milvus支持的向量索引类型大部分使用近似最近邻搜索算法(ANNS,approximate nearest neighbors search) 。ANNS 的核心思想不再局限于返回最准确…

NCI SEER breast cancer美国国立癌症研究所数据库乳腺癌生存分析和乳腺癌预测模型(2024年新项目)

​作者Toby&#xff0c;来源公众号&#xff1a;python生物信息学,美国国立癌症研究所数据库乳腺癌生存分析和乳腺癌预测模型 NCI美国国立癌症研究所(NationalCancerInstitute,NCI) 美国国立癌症研究所&#xff08;NCI&#xff09;是美国国家卫生研究院&#xff08;NIH&#xf…

职场必备!微信自动回复神器来袭,让你轻松应对消息轰炸!

随着消息数量的增加&#xff0c;对于个人和企业来说&#xff0c;及时回复消息变得越来越具有挑战性。幸运的是&#xff0c;现在有了微信管理系统&#xff0c;为我们提供了一种解决方案&#xff0c;让您轻松管理和应对客户的消息&#xff01; 下面&#xff0c;让我们来看看微信…

C语言面试题之判定字符是否唯一

判定字符是否唯一 实例要求 实现一个算法&#xff0c;确定一个字符串 s 的所有字符是否全都不同 实例分析 1、使用一个大小为 256 的bool数组 charSet 来记录字符是否出现过&#xff1b;2、遍历字符串时&#xff0c;如果字符已经在数组中标记过&#xff0c;则返回 false&a…

vue vue3 手写 动态加载组件

效果展示 一、需求背景&#xff1a; # vue3 项目涉及很多图表加载、表格加载 #考虑手写一个动态加载组件 二、实现思路 通过一个加载状态变量&#xff0c;通过v-if判断&#xff0c;加载状态的变量等于哪一个&#xff0c;动态加载组件内部就显示的哪一块组件。 三、实现效果…

USACO 2024 Open Bronze铜组题解

迟到了一个月的题解...... Logical Moos: 啊这题放在铜组T1雀食有点BT...... 首先&#xff0c;我们关注l前第一和r最后那两组。如果这俩有一个是true&#xff0c;那答案肯定也是true。 否则&#xff0c;在l和r外边的都是false。那我们就只用仔细看l和r中间的玩意儿。对于l和…

机器学习中的GBDT模型及其优缺点(包含Python代码样例)

目录 一、简介 二、优缺点介绍 三、Python代码示例 四、总结 一、简介 GBDT&#xff08;Gradient Boosting Decision Tree&#xff09;是一种集成学习算法&#xff0c;被广泛应用于机器学习中的回归和分类问题。它由多个决策树组成&#xff0c;每个决策树都通过迭代逐渐提升…

libVLC 提取视频帧

在前面的文章中&#xff0c;我们使用libvlc_media_player_set_hwnd设置了视频的显示的窗口。 libvlc_media_player_set_hwnd(vlc_mediaPlayer, (void *)ui.widgetShow->winId()); 如果我们想要提取每一帧数据&#xff0c;将数据保存到本地&#xff0c;该如何操作呢&#x…

Mac上怎么合并多张图片?

Mac上怎么合并多张图片&#xff1f;上班过的小伙伴都应该知道&#xff0c;合并拼接图片是一件非常重要且经常需要使用到的图片处理技术&#xff0c;将多张图片合并拼成一张之后能够展现出更多的图片内容。在Mac电脑上&#xff0c;合并多张图片是一项常见的任务&#xff0c;无论…

MySQL——查询数据的处理

一、并列 连接两个数据列的值&#xff0c;并进行输出的格式化处理&#xff08;显示为一种统一的格式&#xff09; concat( 列 1 格式化字 符 ) mysql> select concat(vend_name, vend_country) from vendors; --------------------------------- | concat(vend_name, ve…