前言
快速开始
目标代码块快速限流
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>${sentinel.version}</version>
</dependency>
public class Demo0 {
public static void main(String[] args) {
// 配置规则.
initFlowRules();
while (true) {
// 1.5.0 版本开始可以直接利用 try-with-resources 特性
try (Entry entry = SphU.entry("HelloWorld")) {
// 被保护的逻辑
protectedCodes();
} catch (BlockException ex) {
// 处理被流控的逻辑
System.err.println(DateUtil.formatDateTime(new Date()) + " blocked!");
}
try {
Thread.sleep(RandomUtil.randomLong(300L));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private static void protectedCodes() {
System.out.println(DateUtil.formatDateTime(new Date()) + " hello world");
}
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(3);
rules.add(rule);
FlowRuleManager.loadRules(rules);
}
}
2021-11-11 15:12:38 hello world
2021-11-11 15:12:38 hello world
2021-11-11 15:12:39 hello world
2021-11-11 15:12:39 hello world
2021-11-11 15:12:39 blocked!
2021-11-11 15:12:39 hello world
2021-11-11 15:12:39 blocked!
2021-11-11 15:12:39 blocked!
2021-11-11 15:12:39 blocked!
2021-11-11 15:12:40 hello world
2021-11-11 15:12:40 hello world
2021-11-11 15:12:40 blocked!
2021-11-11 15:12:40 hello world
2021-11-11 15:12:40 blocked!
2021-11-11 15:12:40 blocked!
2021-11-11 15:12:40 blocked!
2021-11-11 15:12:41 hello world
2021-11-11 15:12:41 hello world
2021-11-11 15:12:41 hello world
2021-11-11 15:12:41 blocked!
2021-11-11 15:12:42 hello world
2021-11-11 15:12:42 hello world
2021-11-11 15:12:42 blocked!
2021-11-11 15:12:42 hello world
2021-11-11 15:12:42 blocked!
2021-11-11 15:12:42 blocked!
2021-11-11 15:12:42 blocked!
2021-11-11 15:12:42 blocked!
2021-11-11 15:12:43 hello world
sentinel-dashboard
- 上面快速验证了限流功能
- 我们肯定希望对限流效果和限流规则可视化观察和动态配置
- 官方的
sentinel-dashboard
就是这个作用
- 首先下载官方的 sentinel-dashboard jar包或者下载源码本地跑起调试,建议后者。一定要注意版本!官方下载地址
- 下载源码构建运行后,浏览器访问控制台即可(默认端口8080,默认登录密码 sentinel/sentinel)
sentinel“资源”注册到控制台
- 刚刚的demo引入pom依赖
- Java启动参数添加
-Dcsp.sentinel.dashboard.server=localhost:8080
,使本地应用与dashboard能够通信。
- 启动应用并刷新 dashboard 查看实时监控情况
- 可对注册的“资源”实时配置流控和降级规则,也可配置全局的【系统规则】
- 图示↓
有效参考