【六】SpringCloud Alibaba之整合Sentinel(实现流量控制)

Sentinel是一个可以对接口进行流量控制、熔断降级的一个jar包项目,使用起来非常简单,跟nacos一样可以界面化管理。如下图就sentinel管理界面:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16

下面,将对前面五章整合的代码进行sentinel的整合并实现流量控制作用。

为了实现流量控制会用到一个压力测试工具Jmeter ,可以实现每秒发起多次请求,可以用来进行压力测试,方便下面的限流测试。

因为是在前面五章代码上进行整合的,所有可能会失败,欢迎讨论。

qq交流群导航——>231378628

目录

一、 安装Jmeter

二、 安装Sentinel

三、修改demo代码

四、演示结果


一、 安装Jmeter

下载地址:http://jmeter.apache.org/download_jmeter.cgi

ps:安装过程特别慢,还可能失败(建议手机打开连接安装,然后通过通讯工具发送到PC端。),教程可以参考下面这位大佬的:(17条消息) JAVA常用工具--JMeter压力测试工具_lanyh996的博客-CSDN博客_java压力测试工具

安装之前需要配置java运行环境,安装之后还需要配置jmeter的环境变量,自行百度。

安装之后如下图所示:(设置里更改为了中文)

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16

二、 安装Sentinel

下载地址:github.com,贼慢,可以去找百度云资源,也可以手机下载后传到电脑。

下载后进入cmd,如下:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16

由于是jar包所以可以直接运行,该jar包默认端口是8080,执行java -jar + jar包名称。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16

在浏览器访问localhost:8080,进入如下界面(刚进入是空的,因为还没有跑服务到该地址,所以该地址会是空的),

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16

 下面会修改代码,修改现有服务的配置文件,让sentinel可以拦截服务并进行限流控制。

三、修改demo代码

前几章整合nacos和dubbo之后已经有了如下代码(看不懂可以翻阅前几章):

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16

框选处为将要修改的文件。

1、修改配置类(重点):

前几章我已经将配置文件交由nacos管理,所有不会使用本地配置,如果你没有使用nacos上面的配置文件,你也可以将sentinel的配置继续写到本地配置application.yml配置文件,如下:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16

框选处是新增的配置,dashboard是sentinel的地址,eager是取消控制台的懒加载(默认是关闭的,此处可以开启)。

2、新增测试接口:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16
如上图,新增一个test1接口。

3、新增依赖

我直接在父工程新增依赖,子模块都会生效

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16

如此就可以了,下面进行演示。

四、演示

ps:前提是nacos和sentinel已经启动了。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16 1、 运行项目

运行上面更改配置的demo-provider子项目,将服务注册到nacos并使用nacos上面的配置(前面章节有讲到)。

再展示一下nacos修改后的配置:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16

 2、jmeter调用接口(sentinel不做处理)

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16

我在此处创建了10个线程,一秒请求10次接口。点击运行。watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16 

结果:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_16,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16 调用了10次,时间上有些稍微的误差。

五、sentinel设置流量控制 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16

点击簇点链路 ,选择接口右侧的流控按钮,401176b00842405b9c38ac108075c93e.png

填写该接口每秒允许通过数量,QPS是指服务器每秒响应的请求次数

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16

 点击新增,可以在流控规则列表进行查看,如下图:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16

默认处理方式是快速失败(如果该接口出现错误,后面的线程访问不会一直在此处卡着,导致服务器出现宕机的可能),类似hystrix。

六、 演示

 1、jmeter调用接口(sentinel已做处理)

运行测试计划,执行了十次。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_17,color_FFFFFF,t_70,g_se,x_16

控制台打印了4次,10个线程成功请求了4次。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16

设置的阀值是3,存在一定误差(不在同一秒)。 

拒接的请求默认返回的Blocked by Sentinel (flow limiting)。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCPeuKZgA==,size_20,color_FFFFFF,t_70,g_se,x_16

下一章继续进行sentinel的学习,修改默认的返回值,进行自定义返回值处理和修改流控的其他效果。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小z♂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值