2. Sentinel源码分析—Sentinel是如何进行流量统计的? (6)

DefaultController#canPass

public boolean canPass(Node node, int acquireCount, boolean prioritized) { //判断是限流还是限制并发数量,然后获取流量或并发数量 int curCount = avgUsedTokens(node); //如果两者相加大于限定的并发数 if (curCount + acquireCount > count) { ... return false; } return true; }

这里首先调用avgUsedTokens,根据grade判断当前的规则是QPS限流还是线程数限流,如果两者之和大于count,那么返回false。

返回false之后会回到FlowRuleChecker的checkFlow方法,抛出FlowException异常。

到这里Sentinel的主流程就分析完毕了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwfdp.html