Sentinel熱門詞匯限流的實現詳解
熱點參數限流
何為熱點?熱點即經常訪問的數據。很多時候我們希望統計某個熱點數據中訪問頻次最高的 Top K 數據,並對其訪問進行限制。比如:
- 商品 ID 為參數,統計一段時間內最常購買的商品 ID 並進行限制
- 用戶 ID 為參數,針對一段時間內頻繁訪問的用戶 ID 進行限制
熱點參數限流會統計傳入參數中的熱點參數,並根據配置的限流閾值與模式,對包含熱點參數的資源調用進行限流。熱點參數限流可以看做是一種特殊的流量控制,僅對包含熱點參數的資源調用生效。
基本使用
1、引入maven依賴
<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-parameter-flow-control</artifactId> <version>x.y.z</version> </dependency>
2、手動編寫代碼添加限流規則
@RequestMapping("/getUserOrder") public String getUserOrder(Long userId) { Entry entry = null; try { entry = SphU.entry(getUserOrder, EntryType.IN, 1, userId); return "根據userId獲取用戶訂單信息成功"; } catch (Exception e) { return "您操作的比較頻繁,請稍後重試!"; } finally { if (entry != null) { entry.exit(); } } } // 定義熱點限流的規則,對第一個參數設置 qps 限流模式,閾值為1 ParamFlowRule rule = new ParamFlowRule(getUserOrder) .setParamIdx(0) .setGrade(RuleConstant.FLOW_GRADE_QPS) .setCount(1); ParamFlowRuleManager.loadRules(Collections.singletonList(rule));
或者使用控制臺形式添加熱詞限流規則
正常編寫Java接口
@RequestMapping("/getUserOrder") @SentinelResource(value = "getUserOrder") public String getUserOrder(Long userId) { return "根據userId獲取用戶訂單信息成功"; }
索引名:參數下表從 0 開始
單機閾值:單機部署時在統計時間內可以訪問多少次
統計窗口時長:統計熱詞的時間
可以給指定的參數額外設定閾值:例如:VIP用戶擁有特定的標識,判斷為VIP用戶時,可以請求接口的次數增加。
到此這篇關於Sentinel熱門詞匯限流的實現詳解的文章就介紹到這瞭,更多相關Sentinel熱詞限流內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java之SpringCloudAlibaba Sentinel組件案例講解
- SpringCloud中使用Sentinel實現限流的實戰
- 淺談如何在項目中使用Spring Cloud Alibaba Sentinel組件
- SpringCloud-Alibaba-Sentinel-配置持久化策略詳解
- Spring Cloud Gateway整合sentinel 實現流控熔斷