Sentinel熱門詞匯限流的實(shí)現(xiàn)詳解
熱點(diǎn)參數(shù)限流
何為熱點(diǎn)?熱點(diǎn)即經(jīng)常訪問的數(shù)據(jù)。很多時(shí)候我們希望統(tǒng)計(jì)某個(gè)熱點(diǎn)數(shù)據(jù)中訪問頻次最高的 Top K 數(shù)據(jù),并對其訪問進(jìn)行限制。比如:
- 商品 ID 為參數(shù),統(tǒng)計(jì)一段時(shí)間內(nèi)最常購買的商品 ID 并進(jìn)行限制
- 用戶 ID 為參數(shù),針對一段時(shí)間內(nèi)頻繁訪問的用戶 ID 進(jìn)行限制
熱點(diǎn)參數(shù)限流會(huì)統(tǒng)計(jì)傳入?yún)?shù)中的熱點(diǎn)參數(shù),并根據(jù)配置的限流閾值與模式,對包含熱點(diǎn)參數(shù)的資源調(diào)用進(jìn)行限流。熱點(diǎn)參數(shù)限流可以看做是一種特殊的流量控制,僅對包含熱點(diǎn)參數(shù)的資源調(diào)用生效。
基本使用
1、引入maven依賴
<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-parameter-flow-control</artifactId> <version>x.y.z</version> </dependency>
2、手動(dòng)編寫代碼添加限流規(guī)則
@RequestMapping("/getUserOrder") public String getUserOrder(Long userId) { Entry entry = null; try { entry = SphU.entry(getUserOrder, EntryType.IN, 1, userId); return "根據(jù)userId獲取用戶訂單信息成功"; } catch (Exception e) { return "您操作的比較頻繁,請稍后重試!"; } finally { if (entry != null) { entry.exit(); } } } // 定義熱點(diǎn)限流的規(guī)則,對第一個(gè)參數(shù)設(shè)置 qps 限流模式,閾值為1 ParamFlowRule rule = new ParamFlowRule(getUserOrder) .setParamIdx(0) .setGrade(RuleConstant.FLOW_GRADE_QPS) .setCount(1); ParamFlowRuleManager.loadRules(Collections.singletonList(rule));
或者使用控制臺(tái)形式添加熱詞限流規(guī)則
正常編寫Java接口
@RequestMapping("/getUserOrder") @SentinelResource(value = "getUserOrder") public String getUserOrder(Long userId) { return "根據(jù)userId獲取用戶訂單信息成功"; }
索引名:參數(shù)下表從 0 開始
單機(jī)閾值:單機(jī)部署時(shí)在統(tǒng)計(jì)時(shí)間內(nèi)可以訪問多少次
統(tǒng)計(jì)窗口時(shí)長:統(tǒng)計(jì)熱詞的時(shí)間
可以給指定的參數(shù)額外設(shè)定閾值:例如:VIP用戶擁有特定的標(biāo)識(shí),判斷為VIP用戶時(shí),可以請求接口的次數(shù)增加。
到此這篇關(guān)于Sentinel熱門詞匯限流的實(shí)現(xiàn)詳解的文章就介紹到這了,更多相關(guān)Sentinel熱詞限流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java協(xié)程編程之Loom項(xiàng)目實(shí)戰(zhàn)記錄
這篇文章主要介紹了Java協(xié)程編程之Loom項(xiàng)目嘗鮮,如果用嘗鮮的角度去使用Loom項(xiàng)目,可以提前窺探JVM開發(fā)者們是如何基于協(xié)程這個(gè)重大特性進(jìn)行開發(fā)的,這對于提高學(xué)習(xí)JDK內(nèi)核代碼的興趣有不少幫助,需要的朋友可以參考下2021-08-08Java中==與equals()及hashcode()三者之間的關(guān)系詳解
最近也是在讀Hollis的《深入理解Java核心技術(shù)》里面一節(jié)講到了equals()和hashcode()的關(guān)系,對于這個(gè)高頻面試點(diǎn),咱們需要認(rèn)真理清一下幾者之間的關(guān)系2022-10-10詳解SpringBoot2.0的@Cacheable(Redis)緩存失效時(shí)間解決方案
這篇文章主要介紹了詳解SpringBoot2.0的@Cacheable(Redis)緩存失效時(shí)間解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Java環(huán)境變量的設(shè)置方法(圖文教程)
想要成功配置Java的環(huán)境變量,那肯定就要安裝JDK,才能開始配置的。2013-05-05myBatis組件教程之緩存的實(shí)現(xiàn)與使用
這篇文章主要給大家介紹了關(guān)于myBatis組件教程之緩存的實(shí)現(xiàn)與使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11