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ù)限流會統(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、手動編寫代碼添加限流規(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));或者使用控制臺形式添加熱詞限流規(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)識,判斷為VIP用戶時(shí),可以請求接口的次數(shù)增加。

到此這篇關(guān)于Sentinel熱門詞匯限流的實(shí)現(xiàn)詳解的文章就介紹到這了,更多相關(guān)Sentinel熱詞限流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot的類加載器(org.springframework.boot.loader)過程詳解
這篇文章主要介紹了springboot的類加載器(org.springframework.boot.loader),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
java解析xml匯總_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了java解析xml匯總_動力節(jié)點(diǎn)Java學(xué)院整理的相關(guān)資料,需要的朋友可以參考下2017-07-07
JavaWeb實(shí)現(xiàn)郵件發(fā)送功能
這篇文章主要為大家詳細(xì)介紹了JavaWeb實(shí)現(xiàn)郵件發(fā)送功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12
深入淺出理解Java Lambda表達(dá)式之四大核心函數(shù)式的用法與范例
Lambda 表達(dá)式,也可稱為閉包,它是推動 Java 8 發(fā)布的最重要新特性。Lambda 允許把函數(shù)作為一個(gè)方法的參數(shù)(函數(shù)作為參數(shù)傳遞進(jìn)方法中)。使用 Lambda 表達(dá)式可以使代碼變的更加簡潔緊湊,今天小編帶你理解Lambda表達(dá)式之四大核心函數(shù)式的用法,感興趣的朋友快來看看吧2021-11-11
springboot 整合fluent mybatis的過程,看這篇夠了
這篇文章主要介紹了springboot 整合fluent mybatis的過程,配置數(shù)據(jù)庫連接創(chuàng)建數(shù)據(jù)庫的詳細(xì)代碼,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-08-08

