2.1 FlowSlot 类图
FlowSlot 的类图非常简单,内部持有一个成员变量,FlowRuleChecker,用来判断是否满足流控触发条件。
在继续探讨 Sentinel 限流之前,我们先来了解一下 FlowRule,即认识一下 Sentienl 流控规则主要包含哪些配置项,为后续的流程做一个消息的准备。
2.2 FlowRule 配置项
FlowRule 的类体系如图所示:
其属性的含义如下:
- String resource
资源的名称。
- String limitApp
需要限制的调用来源,对应【新增流控规则界面】的针对来源。
- int grade
流量控制的阈值类型,目前支持 QPS 与 并发线程数,对应 【新增流控规则界面】的阔值类型。
- int strategy
基于调用链的流量控制策略,对应【新增流控规则界面】的流控模式,其可选取值在本文开头部分有详细介绍。
- String refResource
关联资源或入口资源,当流控模式为关联或链路时配置的关联资源或入口资源,对应【新增流控规则界面】的【入口资源】
- int controlBehavior
流量控制后的采取的行为,其可选取值在本文开头部分有详细介绍,对应【新增流控规则界面】的流控效果。
- int warmUpPeriodSec
预热时间,如果 controlBehavior 设置为预热(warm up)时,可以配置其预热时间,在【新增流控规则界面】中选择 warm up 类型后,会增加一行,供用户配置,默认值 10s。
- int maxQueueingTimeMs
最大超时时间,如果 controlBehavior 设置为排队等待时,等待的最大超时时间,默认为500ms。
- boolean clusterMode
是否是集群限流模式,对应【新增流控规则界面】的是否集群。
- ClusterFlowConfig clusterConfig
集群扩容相关配置,集群限流将在后续文章中重点介绍。
在 sentinel-dashboard 的配置界面如下图所示:
2.3 FlowSlot#entry 流程详解
FlowSlot#entry
public void entry(Context context, ResourceWrapper resourceWrapper, DefaultNode node, int count,
boolean prioritized, Object… args) throws Throwable { // @1
checkFlow(resourceWrap