手把收教你Spring Cloud Alibaba基础教程:使用Sentinel实现接口限流

news2024/12/22 19:29:34

我们在上面学习了:

手把手教你Spring Cloud Alibaba教程:nacos安装

手把手教你Spring Cloud Alibaba教程:使用nacos实现服务注册与发现

手把手教你Spring Cloud Alibaba教程:使用Nacos作为配置中心

手把手教你Spring Cloud Alibaba教程:使用Nacos作为配置中心

Sentinel是什么

Sentinel的官方标题是:分布式系统的流量防卫兵。从名字上来看,很容易就能猜到它是用来作服务稳定性保障的。对于服务稳定性保障组件,如果熟悉Spring Cloud的用户,第一反应应该就是Hystrix。但是比较可惜的是Netflix已经宣布对Hystrix停止更新。那么,在未来我们还有什么更好的选择呢?除了Spring Cloud官方推荐的resilience4j之外,目前Spring Cloud Alibaba下整合的Sentinel也是用户可以重点考察和选型的目标。

Sentinel的功能和细节比较多,一篇内容很难介绍完整。所以下面我会分多篇来一一介绍Sentinel的重要功能。本文就先从限流入手,说说如何把Sentinel整合到Spring Cloud应用中,以及如何使用Sentinel Dashboard来配置限流规则。通过这个简单的例子,先将这一套基础配置搭建起来。

使用Sentinel实现接口限流

Sentinel的使用分为两部分:

  • sentinel-dashboard:与hystrix-dashboard类似,但是它更为强大一些。除了与hystrix-dashboard一样提供实时监控之外,还提供了流控规则、熔断规则的在线维护等功能。
  • 客户端整合:每个微服务客户端都需要整合sentinel的客户端封装与配置,才能将监控信息上报给dashboard展示以及实时的更改限流或熔断规则等。

下面我们就分两部分来看看,如何使用Sentienl来实现接口限流。

部署Sentinel Dashboard

  • 下载地址:sentinel-dashboard-1.6.0.jar
  • 其他版本:Sentinel/releases

我们目前使用得是1.6.0目前已经升级到1.8.3了。

通过命令启动:

java -jar sentinel-dashboard-1.6.0.jar &

sentinel-dashboard不像Nacos的服务端那样提供了外置的配置文件,比较容易修改参数。不过不要紧,由于sentinel-dashboard是一个标准的spring boot应用,所以如果要自定义端口号等内容的话,可以通过在启动命令中增加参数来调整,比如:-Dserver.port=8888

默认情况下,sentinel-dashboard以8080端口启动,所以可以通过访问:localhost:8080来验证是否已经启动成功,如果一切顺利的话,可以看到如下页面:

 

注意:只有1.6.0及以上版本,才有这个简单的登录页面。默认用户名和密码都是sentinel。对于用户登录的相关配置可以在启动命令中增加下面的参数来进行配置:

  • -Dsentinel.dashboard.auth.username=sentinel: 用于指定控制台的登录用户名为 sentinel;
  • -Dsentinel.dashboard.auth.password=123456: 用于指定控制台的登录密码为 123456;如果省略这两个参数,默认用户和密码均为 sentinel
  • -Dserver.servlet.session.timeout=7200: 用于指定 Spring Boot 服务端 session 的过期时间,如 7200 表示 7200 秒;60m 表示 60 分钟,默认为 30 分钟;

输入账户密码登录后,就登录成功了。

整合Sentinel

第一步:在Spring Cloud应用的pom.xml中引入Spring Cloud Alibaba的Sentinel模块:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.2</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

第二步:在Spring Cloud应用中通过spring.cloud.sentinel.transport.dashboard参数配置sentinel dashboard的访问地址,比如:

spring.application.name=alibaba-sentinel-rate-limiting

server.port=8003

# sentinel dashboard
spring.cloud.sentinel.transport.dashboard=http://localhost:8080

第三步:创建应用主类,并提供一个rest接口,比如:

@SpringBootApplication
public class SentinelRateApplication {
    public static void main(String[] args) {
        SpringApplication.run(SentinelRateApplication.class);
    }

    @Slf4j
    @RestController
    static class TestController {

        @GetMapping("/hello")
        public String hello(@RequestParam(value = "name") String name) {
            log.info("server name:"+name);
            return "hello:" + name;
        }
    }
}

第四步:启动应用,然后通过postman或者curl访问几下localhost:8003/hello?name=222接口。

此时,在上一节启动的Sentinel Dashboard中就可以当前我们启动的alibaba-sentinel-rate-limiting这个服务以及接口调用的实时监控了。具体如下图所示:

特别说明:

     但是有一种情况,比如我们sentinel是部署到A服务器上,但是我们得服务是部署到本地,是服务看到上面实时监控得。

问题原因:一般是sentinel服务器和项目服务器时间不一致造成的

sentinel服务器和项目服务器时间改为一致,重新启动项目访问接口即可正常(最好部署到同一台服务器)

配置限流规则

在完成了上面的两节之后,我们在alibaba-sentinel-rate-limiting服务下,点击簇点链路菜单,可以看到如下界面:

 

其中/hello接口,就是我们上一节中实现并调用过的接口。通过点击流控按钮,来为该接口设置限流规则,比如:

 

这里做一个最简单的配置:

  • 阈值类型选择:QPS
  • 单机阈值:1

综合起来的配置效果就是,该接口的限流策略是每秒最多允许2个请求进入。

点击新增按钮之后,可以看到如下界面:

 

其实就是左侧菜单中流控规则的界面,这里可以看到当前设置的所有限流策略。

验证限流规则

在完成了上面所有内容之后,我们可以尝试一下快速的调用这个接口,看看是否会触发限流控制,比如:

Blocked by Sentinel (flow limiting)

可以看到,快速的调用两次/hello接口之后,第二次调用被限流了。

 

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

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

相关文章

最小二乘法拟合直线、曲线

参考文章&#xff1a;马同学马同学提供线性代数,微积分,概率论与数理统计,机器学习等知识讲解https://www.matongxue.com/madocs/818/ C最小二乘法拟合-&#xff08;线性拟合和多项式拟合&#xff09;_尘中远的博客-CSDN博客_namespace gsl 最小二乘法—多项式拟合非线性函数…

LeetCode_BFS_DFS_简单_1971.寻找图中是否存在路径

目录1.题目2.思路3.代码实现&#xff08;Java&#xff09;1.题目 有一个具有 n 个顶点的 双向 图&#xff0c;其中每个顶点标记从 0 到 n - 1&#xff08;包含 0 和 n - 1&#xff09;。图中的边用一个二维整数数组 edges 表示&#xff0c;其中 edges[i] [ui, vi] 表示顶点 u…

MR案例(2):学生排序(单字段排序、多字段排序)

文章目录一、任务目标1. 准备数据二、实行任务1. 创建Maven项目2. 添加相关依赖3. 创建日志属性文件4. 创建学生实体类5. 创建学生映射器类6. 创建学生归并器类7. 创建学生驱动类8. 启动学生驱动器类&#xff0c;查看结果一、任务目标 MR案例&#xff1a;学生排序&#xff08;…

【C++】继承与面向对象设计

目录 一、确保public继承塑模出is-a关系 二、避免隐藏继承而来的名称 三、区分接口继承和实现继承 四、考虑virtual函数以外的其他选择 五、不要重新定义继承而来的non-virtual函数 六、不要重新定义继承而来的缺省参数 七、尽量使用复合塑模出has-a 总结 一、确保publ…

【MySQL】Innodb存储引擎之物理存储结构(MySQL专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码&#xff0c;就职于大型金融公司后端高级工程师&#xff0c;擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

云服务器安装jdk

第一步使用工具连接自己的服务器 连接成功后 在左侧选择需要上传的文件到opt目录 在云服务器的命令行操作界面输入指令 解压&#xff0c;输入jdk按table键自动补全 tar -zxvf 配置环境变量 vim /etc/profile 修改环境变量&#xff08;具体视安装 java 地址修改&#xff09; …

计算机毕设Python+Vue学生实验报告管理系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

jQuery 介绍

文章目录jQuery 介绍介绍下载安装jQuery 介绍 介绍 jQuery本身就是用JavaScript来写的&#xff0c;它只是把JavaScript中最常用的功能封装起来&#xff0c;以方便开发者快速开发。遥想当年&#xff0c;jQuery的创始人John Resig就是受够了JavaScript的各种缺点&#xff0c;所…

微服务框架 SpringCloud微服务架构 服务异步通讯 51 死信交换机 51.1 初识死信交换机

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 服务异步通讯 文章目录微服务框架服务异步通讯51 死信交换机51.1 初识死信交换机51.1.1 初识死信交换机51.1.2 总结51 死信交换机 51.1 初识…

java 多线程 上

目录 基本概念 线程的创建和使用 Thread类 API中创建线程的两种方式 Thread类的有关方法 线程的调度 线程的优先级 总结 基本概念 程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码&#xff0c;静态对象。 进程(process)是程…

TapTap 算法平台的 Serverless 探索之路

作者&#xff1a;陈欣昊 Serverless 在构建应用上为 TapTap 节省了大量的运维与开发人力&#xff0c;在基本没投入基建人力的情况下&#xff0c;直接把我们非常原始的基建&#xff0c;或者说是资源管理水平拉到了业界相对前沿的标准。最直观的数据是&#xff0c;仅投入了个位数…

代码随想录Day55|392.判断子序列、115.不同的子序列

文章目录392.判断子序列115.不同的子序列392.判断子序列 文章讲解&#xff1a;代码随想录 (programmercarl.com) 题目链接&#xff1a;392. 判断子序列 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。…

koa 使用

&#xff08;贴个官网&#xff0c;koa 内容真不多&#xff0c;非常的小巧轻量&#xff09; 1. koa 是什么 一个更小、更富有表现力、更健壮的 Web 框架。使用 koa 编写 web 应用&#xff0c;通过组合不同的 generator&#xff0c;可以免除重复繁琐的回调函数嵌套&#xff0c;…

关于新正方教务系统(湖北工程学院)的one day越权漏洞的说明

关于正方教务系统漏洞的说明 此漏洞基于湖北工程学院教务管理系统进行演示&#xff0c;漏洞覆盖新正方教务系统8.0以下版本&#xff0c;为本人一年前提交的漏洞&#xff0c;所以并非0day漏洞 此漏洞影响范围巨大&#xff0c;几乎涉及国内一半高校的教务系统&#xff0c;包含武…

我国油气行业勘探开发投入提升 石油资源存在供需短缺矛盾 天然气需求高速发展

根据观研报告网发布的《2022年中国油气市场分析报告-市场竞争策略与发展动向前瞻》显示&#xff0c;油气是指石油和伴生的天然气&#xff0c;被誉为“能源之王”、“工业的血液”&#xff0c;是全世界各国的战略性产业。油气资源种类多样&#xff0c;根据开采难度可分为两大类&…

Python:三方库安装路径及路径变更

文章目录一、安装三方库的几种方式二、指定第三方库的镜像源三、查看安装默认路径四、修改安装默认路径五、查看安装的库六、导出库安装文件七、安装小结一、安装三方库的几种方式 1.直接pip install安装&#xff08;有网的环境下通用&#xff09; &#xff1a; 在python–>…

CSDN上讲得最好的——Linux权限

目录 一、shell原理精讲 二、Linux权限概念 三、权限管理 1、访问者分类 2、文件类型及访问权限 3、表示方法 4、设置方法 &#xff08;1&#xff09;chmod (2)chown (3)chgrp (4)umask 四、目录权限 五、粘滞位 一、超级管理员删除 二、该目录的所有者删除 三、…

GDAL之重投影(详细篇)

一、空间坐标系对应EPSG编号 二、通用横向墨卡托(UTM)投影坐标系和WGS84地理坐标系转换 一、目标地区的编号查看(中国东部地区属于UTM Zone 50N) 从180“W开始&#xff0c;有60个纵向投影区&#xff0c;编号为1到60。除了挪威和斯瓦尔巴群岛附近的一些例外&#xff0c;每个区…

【毕业设计_课程设计】基于 U-Net 网络的遥感图像语义分割(源码+论文)

文章目录0 项目说明1 研究目的2 研究方法3 研究结论4 论文目录5 项目工程0 项目说明 **基于 U-Net 网络的遥感图像语义分割 ** 提示&#xff1a;适合用于课程设计或毕业设计&#xff0c;工作量达标&#xff0c;源码开放 实验训练使用 Anaconda 版 Python 3.7 下的 TensorFlo…

OpenSSL BIO源码简析

文章目录1. BIO简介BIO chainBIO数据结构BIO_METHOD数据结构2. Base64示例分析初始化构造BIO链写数据free1. BIO简介 相关文档 /html/man7/bio.html /html/man3/BIO_*.htmlbio - Basic I/O abstraction&#xff0c;即IO抽象层。 BIO有两种: source/sink BIO&#xff0c;即数…