sentinel篇1-官方快速限流指引
阿新 • • 發佈:2021-11-11
最近 API 在改造,要開始考慮限流問題了。團隊專案技術棧主為阿里系,自然就是 `sentinel` 了。
前言
- 最近 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 檢視實時監控情況
- 可對註冊的“資源”實時配置流控和降級規則,也可配置全域性的【系統規則】
- 圖示↓