快速开始

参考Sentinel官方文档的快速开始。

引入依赖

1
2
3
4
5
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>1.8.5</version>
</dependency>

自定义资源

资源 是 Sentinel 中的核心概念之一。最常用的资源是我们代码中的 Java 方法。 当然,您也可以更灵活的定义你的资源。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void sentinelTest2(int i) {
try (Entry entry = SphU.entry("sentinelTest1")) {
// 被保护的逻辑
log.info(i + "");
} catch (BlockException ex) {
// 处理被流控的逻辑
exceptionHandler(i, ex);
}
}


public static void exceptionHandler(int i, BlockException blockException) {
log.info("阻断:" + i);
}

我们还可以使用注解来定义一个资源。

1
2
3
4
@SentinelResource(value = "sentinelTest1", blockHandler = "exceptionHandler")
public void sentinelTest (int i) {
log.info(i + "");
}

定义规则

1
2
3
4
5
6
7
8
9
10
11
@PostConstruct
private static void initFlowRules(){
List<FlowRule> rules = new ArrayList<>();
FlowRule rule = new FlowRule();
rule.setResource("sentinelTest1");
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
// Set limit QPS to 20.
rule.setCount(20);
rules.add(rule);
FlowRuleManager.loadRules(rules);
}

测试

写一个请求,让它循环调用100次我们的资源。

1
2
3
4
5
6
@GetMapping("/sentinelTest1")
public void sentinelTest1() {
for (int i = 0; i < 100; i ++){
postService.sentinelTest1(i);
}
}