Sentinel的主要特性:
控制台
重头戏在Sentinel的管理控制台,管理控制台提供了很多实用的功能
引入Maven依赖
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>1.8.1</version>
</dependency>
SentinelTest.java
package com.example.sentinel;
import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.SphU;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class SentinelTest {
public static void main(String[] args) {
initFlowRules();
//首先需要定义一个资源entry,
// 然后用SphU.entry("HelloWorld")和entry.exit()把需要流量控制的代码包围起来
while (true) {
Entry entry = null;
try {
entry = SphU.entry("HelloWorld");
//10ms的时候 会block 如果qps不超过10次,可以一直正常运行
TimeUnit.MILLISECONDS.sleep(10);
/*您的业务逻辑 - 开始*/
System.out.println("hello world");
/*您的业务逻辑 - 结束*/
} catch (BlockException | InterruptedException e1) {
/*流控逻辑处理 - 开始*/
System.out.println("block!");
/*流控逻辑处理 - 结束*/
} finally {
if (entry != null) {
entry.exit();
}
}
}
}
/*
* 通过定义规则来控制该资源每秒允许通过的请求次数,
* 例如下面的代码定义了资源 HelloWorld
* 每秒最多只能通过 20 个请求。
* */
private static void initFlowRules(){
List<FlowRule> rules = new ArrayList<>();
FlowRule rule = new FlowRule();
rule.setResource("HelloWorld");
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
// Set limit QPS to 20.
rule.setCount(20);
rules.add(rule);
FlowRuleManager.loadRules(rules);
}
}
代码说明 参照注释
1.资源的定义,可以是一段代码片段
从 SphU.entry(“HelloWorld”); 开始,标注资源的名称是HelloWorld
从 entry.exit(); 结束
2.initFlowRules()就是对这个资源方法问限流,比如说1秒钟限制最大的请求数不超过10,如果超过,抛出异常 BlockException
定义规则 FlowRule
指定 限流的资源 rule.setResource(“HelloWorld”);
指定降级规则 setGrade
FlowRuleManager 启动这个rule规则