Day05-Sentinel限流熔断应用实践

Sentinel简介

背景分析

Sentinel限流入门

第一步:在提供方sca-provider配置sentinel依赖

 第二步:配置

第三步:创建类

 第四步:启动sca-provider服务,然后对指定服务进行访问

第五步:刷新sentinel 控制台,实时监控信息

 Sentinel限流入门实践

我们设置一下指定接口的流控(流量控制),QPS(每秒请求次数)单机阈值为1,代表每秒请求不能超出1次,要不然就做限流处理,处理方式直接调用失败。

第一步:设置限流策略

第二步:设置限流策略

第三步:反复刷新访问消费端端服务,检测是否有限流信息输出

 第四步:查看Sentinel控制台,会发现有拒绝的次数

Sentinel流控规则分析

阈值类型

  • QPS(Queries Per Second):当调用相关url对应的资源时,QPS达到单机阈值时,就会限流。
  • 线程数:当调用相关url对应的资源时,线程数达到单机阈值时,就会限流。

设置限流模式

Sentinel的流控模式代表的流控的方式,默认【直接】,还有关联,链路。

直接模式

Sentinel默认的流控处理就是【直接->快速失败】。

 关联模式

当关联的资源达到阈值,就限流自己。例如设置了关联资源为/ur2时,假如关联资源/url2的qps阀值超过1时,就限流/url1接口(是不是感觉很霸道,关联资源达到阀值,是本资源接口被限流了)。这种关联模式有什么应用场景呢?我们举个例子,订单服务中会有2个重要的接口,一个是读取订单信息接口,一个是写入订单信息接口。在高并发业务场景中,两个接口都会占用资源,如果读取接口访问过大,就会影响写入接口的性能。业务中如果我们希望写入订单比较重要,要优先考虑写入订单接口。那就可以利用关联模式;在关联资源上面设置写入接口,资源名设置读取接口就行了;这样就起到了优先写入,一旦写入请求多,就限制读的请求。
第一步:在ProviderSentinelController中添加一个方法

 第二步:在sentinel中做限流设计

在这里插入图片描述

第三步:打开两个测试窗口,对/provider/sentinel02进行访问,检查/provider/sentinel01的状态

 链路模式

链路模式只记录指定链路入口的流量。也就是当多个服务对指定资源调用时,假如流量超出了指定阈值,则进行限流。被调用的方法用@SentinelResource进行注解,然后分别用不同业务方法对此业务进行调用,假如A业务设置了链路模式的限流,在B业务中是不受影响的。现在对链路模式做一个实践,
第一步:在指定包创建一个ResourceService类,

 第二步:在ProviderSentinelController中添加一个方法,

第三步::在sentinel中配置限流规则

在这里插入图片描述

第四步:设置链路流控规则后,再频繁对限流链路进行访问,检测是否会出现500异常

 后端会报错

 说明,流控模式为链路模式时,假如是sentinel 1.7.2以后版本,Sentinel Web过滤器默认会聚合所有URL的入口为sentinel_spring_web_context,因此单独对指定链路限流会不生效,需要在bootstrap.yml添加如下语句来关闭URL PATH聚合

当我们也可以基于@SentinelResource注解描述的方法进行限流后的异常进行自定义处理,其步骤如下:

第一步:定义blockHandlerClass

第二步:修改@SentinelResource注解中的属性定义,

 第三步:在controller方法中,调用@Sentinel注解描述的方法

 第四步:访问网页并查看

 如何将Sentinel限流中自定义内容?

第一步:在idea中通过ctrl+n查找

 第二步:通过ctrl+h查找BlockExceptionHandler接口中的类,找到

 第三步:自定义一个类来实现BlockExceptionHandler接口

 第四步:在sentinel中设置限流后访问,出现自定义内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值