QPS直接失败
新增控制流程

image.png
选择QPS,单机阀值可以选择小一点便于测试
流控模式设置直接,流控效果设置快速失败
新增后,访问:http://localhost:8401/testA
快速点击访问,模拟提高并发

image.png
显示
Blocked by Sentinel (flow limiting)这就是QPS直接失败
qps:每秒钟的请求数量,当调用该api的qps达到阀值的时候,进行限流
线程数直接失败

image.png
线程直接失败的配置和QPS直接失败的配置很像,但是同一时间线程数达到阈值后直接失败*
关联
流控模式:
- 直接:api达到限流条件时,直接限流
- 关联:当关联的资源达到阈值时,就限流自己
- 链路:只记录指定链路上的流量(指定资源从欠口资源进来的流量,如果达到阈值,就进行限流)【api级别的针对来源】

image.png
当关联的资源达到阈值时,就限流自己
当与A关联的资源B达到阀值后,就限流A自己
B惹事,A挂了
预热
案例,阀值为10+预热时长设置5秒。
系统初始化的阀值为10/3约等于3,即阀值刚开始为3;然后过了5秒后阀值才慢慢升高恢复到10
默认coldFactor为3,即请求QPS从(threshold /3)开始,经多少预热时长才逐渐升至设定的QPS阈值。

image.png
如:秒杀系统在开启的瞬间,会有很多流量上来,很有可能把系统打死,预热方式就是把为了保护系统,可慢慢的把流量放进来,
慢慢的把阀值增长到设置的阀值.
排队等待
匀速排队,让请求以均匀的速度通过,阀值类型必须设成QPS,否则无效。
设置含义:/testA每秒1次请求,超过的话就排队等待,等待的超时时间为20000毫秒。

image.png
匀速排队( RuleConstant.CONTROL_BEHAVIOR_RATE_INITER)方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。详细文档可以参考流量控制-匀速器模式,具体的例子可以参见PaceFlowDemo。
这种方式主要用于处理间隔性突发的流量,例如消息队列。想象一下这样的场景,在某一秒有大量的请求到来,而接下来的几秒则处于空闲状态,我们希望系统能够在接下来的空闲期间逐渐处理这些请而不具在笛—孙百接拓的多全的害求

image.png
FlowLimitController.java
@RestController
@Slf4j
public class FlowLimitController
{
@GetMapping("/testA")
public String testA() {
return "------testA";
}
@GetMapping("/testB")
public String testB() {
log.info(Thread.currentThread().getName()+"\t"+"...testB");
return "------testB";
}
}
这样的好处就是无论碰到什么情况都可以让线程排队等待

image.png