sentinel篇1-官方快速限流指引

前言

  • 最近 API 在改造,要开始考虑限流问题了。团队项目技术栈主为阿里系,自然就是 sentinel 了。
  • 开始前,一定要检查官方各开源组件版本对照:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明,找到正确版本能避掉很多坑!
  • 本系列版本和demo可文末参考

快速开始

目标代码块快速限流

  • pom
<dependency>
	<groupId>com.alibaba.csp</groupId>
	<artifactId>sentinel-core</artifactId>
	<version>${sentinel.version}</version>
</dependency>
  • main方法
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
  • 限流阻断OK!

sentinel-dashboard

  • 上面快速验证了限流功能
  • 我们肯定希望对限流效果和限流规则可视化观察和动态配置
  • 官方的 sentinel-dashboard 就是这个作用
  • 首先下载官方的 sentinel-dashboard jar包或者下载源码本地跑起调试,建议后者。一定要注意版本!官方下载地址
  • 下载源码构建运行后,浏览器访问控制台即可(默认端口8080,默认登录密码 sentinel/sentinel)

sentinel“资源”注册到控制台

  • 刚刚的demo引入pom依赖
  • Java启动参数添加-Dcsp.sentinel.dashboard.server=localhost:8080,使本地应用与dashboard能够通信。
  • 启动应用并刷新 dashboard 查看实时监控情况
  • 可对注册的“资源”实时配置流控和降级规则,也可配置全局的【系统规则】
  • 图示↓
    sentinel篇1-官方快速限流指引

有效参考

上一篇:sentinel篇2-资源注解使用-结合SpringAOP


下一篇:QuickBI助你成为分析师-保证数据安全:行级权限