当前位置: 首页 > news >正文

java微服务商城高并发秒杀项目--009.流控规则和降级规则

线程流控(只要线程数达到了指定数量,访问就会被流控):

warm up流控效果(慢慢增加QPS的数量,之后最后达到阈值,这种情况下,一开始会容易限流,后期就不会限流了):

排队处理(当每秒的访问达到阈值的时候,这一秒内的下一次访问会等待0.5s,可以看到访问的图标会有一个转圈的动态 ):

在SentinelController中增加sentinel3的controller:

    @RequestMapping("/sentinel3")public String sentinel3() {return "sentinel3"; } 

关联流控(将/sentinel3和/sentinel2进行关联后,只要/sentinel2的每秒访问超过3,/sentinel3 就会被流控):

链路流控:

在shop-order-server项⽬中新增TraceServiceImpl.java

@Service
@Slf4j
public class SentinelServiceImpl {@SentinelResource(value = "tranceService")public void tranceService(){// 做业务log.info("业务资源");}
} 

在shop-order-server项⽬的application.yml⽂件中新增如下配置,防止访问路径被折叠:

spring:cloud:nacos:discovery:server-addr: localhost:8848sentinel:transport:port: 9999dashboard: localhost:8080web-context-unify: false 

在shop-order-server项⽬中新增TraceController.java:

@RestController
public class TraceController {@Autowiredprivate SentinelServiceImpl sentinelService;@RequestMapping("/trace1")public String trace1(){sentinelService.tranceService();return "trace1";}@RequestMapping("/trace2")public String trace2(){sentinelService .tranceService();return "trace2";}
}

设置流控规则(这样实现了对/trace2限流,但对/trace1不限流):

去除tomcat对线程的限制,并重新启动order模块:

新增sentinel1降级规则(这个检验一个人完成不了,因为本身我们会睡眠1s,无法实现1s三次请求,理论上1s内访问3次后,比例为1超过了设定的0.5,会直接熔断5s,5s可重新访问):

异常比例

在shop-order-server项⽬的SentinelController.java类新增fallBack2⽅法:

@RestController
@Slf4j
public class SentinelController  {@RequestMapping("/sentinel1")public String sentinel1() throws InterruptedException {TimeUnit.SECONDS.sleep(1);return "sentinel1";}@RequestMapping("/sentinel2")public String sentinel2() {return "sentinel2";}@RequestMapping("/sentinel3")public String sentinel3() {return "sentinel3";}int i=0;@RequestMapping("/fallBack2")public String fallBack2(){log.info("fallBack2执⾏业务逻辑");//模拟出现异常,异常⽐例为33%if(++i%3==0){throw new RuntimeException();}return "fallBack2"; }
}

异常数降级(一般每三次请求会被降级一次):

异常数降级(1s内出现1个异常就降级,熔断5s)

http://www.lryc.cn/news/57834.html

相关文章:

  • php编写的脚本,如何才能在windows系统运行呢?
  • 政务综合服务平台建设项目方案书
  • python好玩的短代码
  • 会Python如何学习C#的几个关键点
  • 索引失效原则与查询优化
  • 读完这篇文章你就彻底了解了什么是AES算法
  • ArrayDeque类常用方法
  • Leetcode.130 被围绕的区域
  • MySQL-四大类日志
  • 新加坡量子软件公司Horizon完成1810万美元A轮融资
  • Spring学习(四):Scope的介绍及其失效解决方案
  • 【学习集合--Set】
  • 函数的参数
  • 数组(八)-- LC[53][152] 最大子数组之和与乘积最大子数组
  • docker2-zabbix
  • ctcdecode安装
  • 虚树学习小记
  • 【C++】特殊类设计(单例模式)
  • 基于YOLOv5的水下海洋目标检测
  • 磁盘这列(Raid)
  • Oracle之PL/SQL存储过程与函数练习题(七)
  • C++入门教程||C++ 基本的输入输出||C++ 数据结构
  • 线性表——顺序表
  • 第六章 Vite4+Vue3+Vtkjs 模型颜色切换、漫反射曲面颜色
  • 【QT学习七】QTreeWidget
  • 【Linux】组管理和权限管理
  • 从零到一发布 NPM 包
  • uniapp国际化配置
  • 前端中 try-catch 捕获不到哪些异常和常见错误
  • javaEE 初阶 — 如何构造一个 HTTP 请求