0
点赞
收藏
分享

微信扫一扫

Sentinel热点参数规则说明


前言

当经常访问的数据过热时,可以对其访问进行限流。例如:针对一段时间内的特定的用户、城市等进行限制。可以优先用于redis热点key的限流中。

另:本文只做规则说明,实战时可做参考,源码解析部分详见:

《Sentinel热点参数如何限流【原理源码】》

一、参数说明

热点参数限流由规则ParamFlowRule负责,下面看下各个属性的含义。

参数    说明
resource    必填项,资源名称
limitApp    授权使用限制来源方,默认default
grade    0:线程数(客户端并发控制)1:QPS(默认)
paramIdx    必填项,热点参数索引位置 对应SphU.entry(xxx, args)中的参数索引位置
count    必填项,限流阈值
controlBehavior    0:直接拒绝(默认)2:匀速通过
maxQueueingTimeMs    当controlBehavior=2时,排队等待时间
burstCount    应对突发流量额外允许的数量
durationInSec    统计窗口时间长度,默认1秒
paramFlowItemList    额外选项,针对特定的参数单独限流
clusterMode    是否为集群模式,默认false
clusterConfig    集群限流配置

二、参数格式

1.不带额外项JSON格式

 

[
{
"burstCount": 0,
"clusterMode": false,
"controlBehavior": 0,
"count": 5,
"durationInSec": 1,
"grade": 1,
"limitApp": "default",
"maxQueueingTimeMs": 0,
"paramFlowItemList": [],
"paramIdx": 0,
"resource": "resA"
}
]
2.带额外项JSON格式
[
{
"burstCount": 0,
"clusterMode": false,
"controlBehavior": 0,
"count": 5,
"durationInSec": 1,
"grade": 1,
"limitApp": "default",
"maxQueueingTimeMs": 0,
"paramFlowItemList": [
{
"classType": "int",
"count": 10,
"object": "2"
}
],
"paramIdx": 0,
"resource": "resA"
}
]


三、使用方式

注意:exit的时候也一定要带上对应的参数(exit(count, args)),否则可能会有统计错误

Entry entry = null;
try {
entry = SphU.entry(resourceName, EntryType.IN, 1, paramA, paramB);
// 业务逻辑
} catch (BlockException ex) {
// 发送流控
} finally {
if (entry != null) {
entry.exit(1, paramA, paramB);
}
}


 

举报

相关推荐

0 条评论