当通过GatewayRuleManager加载网关流控规则(GatewayFlowRule)时,无论是否针对请求属性进行限流,Sentinel底层都会将网关流控规则转化为热点参数规则(ParamFlowRule),存储在GatewayRuleManager中,与正常的热点参数规则相隔离。转换时Sentinel会根据请求属性配置,为网关流控规则设置参数索引(idx),并同步到生成的热点参数规则中。
外部请求进入API Gateway时会惊醒Sentinel实现的filter,其中会依次进行“路由API分组匹配->请求属性解析和参数组装”。Sentinel会根据配置的网关流控规则来解析请求属性,并依照参数索引顺序组装参数数组,最终传入SphU.entry(res,args)中。
Sentinel API Gateway Adapter Common模块向Slot Chain中添加了一个GatewayFlowSlot,专门用来做网关规则的检查。GatewayFlowSlot会从GatewayRuleManager中提取生成的热点参数规则,根据传入的参数依次进行规则检查。若某条规则不针对请求属性,则会在参数最后一个位置置入预设的常量,达到普通流控的效果。