Sentinel[超詳細講解]-4

🚓 主要講解流控模式的 三種方式中的兩種:?直接、鏈路🚀

1?? 直接模式

🚎?直接模式:對資源本身進行限流,例如對某個接口進行限流,當該接口的訪問頻率超過設定的閾值時,直接拒絕新的請求。

接口限流?? :對某個接口進行限流,例如對訂單創建接口進行限流,當該接口的訪問頻率超過設定的閾值時,直接拒絕新的請求。

實現步驟:?

1?? 引入依賴:在項目中引入 Sentinel 相關依賴如com.alibaba.csp.sentinel.annotation.SentinelResource? 等

2?? 定義資源:指定要限流的資源名稱,像示例中的 createOrder。

3?? 配置規則:

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class OrderService {private static final String RESOURCE_NAME = "createOrder";@PostConstructprivate void initFlowRules() {List<FlowRule> rules = new ArrayList<>();FlowRule rule = new FlowRule();rule.setResource(RESOURCE_NAME);rule.setGrade(RuleConstant.FLOW_GRADE_QPS);rule.setCount(10);rule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_DEFAULT);rule.setLimitApp("default");rules.add(rule);FlowRuleManager.loadRules(rules);}@SentinelResource(value = RESOURCE_NAME, blockHandler = "createOrderBlockHandler")public String createOrder(String orderInfo) {return "訂單創建成功: " + orderInfo;}public String createOrderBlockHandler(String orderInfo, BlockException ex) {return "請求過于頻繁,請稍后再試!當前訂單信息: " + orderInfo;}

上述代碼在 OrderService 類中,initFlowRules 方法初始化限流規則,設置資源為 createOrder,基于 QPS 限流,閾值 10。createOrder 方法是業務邏輯,被限流時 createOrderBlockHandler 方法返回友好提示。

2???鏈路模式

🚫 鏈路流控(Link Flow Control)是指對資源調用關系的入口進行流量控制。與普通流控不同,鏈路流控關注的是入口資源和被調用資源之間的關系。

使用步驟🚲

1?? 在配置文件中啟用鏈路流控模式

spring:cloud:sentinel:web-context-unify: false # 必須設置為false才能啟用鏈路流控

?2?? 定義流控規則

控制臺:在Sentinel控制臺中定義鏈路流控規則,指定入口資源和被調用資源的關系,以及流控規則。

import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import javax.annotation.PostConstruct;
import java.util.Collections;public class LinkFlowRuleConfig {private static final String ENTRY_RESOURCE = "orderWeb";private static final String TARGET_RESOURCE = "orderService";@PostConstructpublic void initLinkFlowRules() {FlowRule rule = new FlowRule();rule.setResource(TARGET_RESOURCE); // 被保護的資源rule.setGrade(RuleConstant.FLOW_GRADE_QPS); // 基于QPSrule.setCount(10); // 閾值rule.setLimitApp(ENTRY_RESOURCE); // 限制的入口資源FlowRuleManager.loadRules(Collections.singletonList(rule));}
}

這里定義入口資源 orderWeb 和被保護資源 orderService,設置基于 QPS 閾值 10 的限流規則???

3?? 業務代碼適配example

import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.SphU;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import org.springframework.stereotype.Service;@Service
public class OrderService {public String createOrder(String orderInfo) {// 1. 定義入口資源try (Entry entry = SphU.entry("orderWeb")) {// 2. 實際業務處理return doCreateOrder(orderInfo);} catch (BlockException e) {// 3. 處理流控邏輯return "創建訂單請求被限流";}}@SentinelResource(value = "orderService", blockHandler = "orderServiceBlockHandler")private String doCreateOrder(String orderInfo) {// 業務邏輯return "訂單創建成功: " + orderInfo;}public String orderServiceBlockHandler(String orderInfo, BlockException ex) {return "訂單服務繁忙,請稍后再試";}
}

🈲 鏈路流控的注意事項

  1. 入口資源定義:必須明確定義入口資源,通常使用SphU.entry()@SentinelResource注解

  2. 配置要求:必須設置?🚑 spring.cloud.sentinel.web-context-unify=false

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/75438.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75438.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/75438.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

工作記錄 2017-03-24

工作記錄 2017-03-24 序號 工作 相關人員 1 修改了郵件上的問題。 更新RD服務器。 郝 更新的問題 1、修改了New User時 init的保存。 2、文件的查詢加了ID。 3、加了 patient insurance secondary 4、修改了payment detail的處理。 識別引擎監控 Ps (iCDA LOG :剔除…

裴蜀定理:整數解的奧秘

裴蜀定理&#xff1a;整數解的奧秘 在數學的世界里&#xff0c;裴蜀定理&#xff08;Bzout’s Theorem&#xff09;是數論中一個非常重要的定理&#xff0c;它揭示了二次方程和整數解之間的關系。它不僅僅是純粹的理論知識&#xff0c;還在計算機科學、密碼學、算法優化等多個…

python之 “__init__.py” 文件

提示&#xff1a;python之 “init.py” 文件 文章目錄 前言一、Python 中 __init__.py 文件的理解1. What&#xff08;是什么&#xff09;2. Why&#xff08;為什么需要&#xff09;3. Where&#xff08;在哪里使用&#xff09;4. How&#xff08;如何使用&#xff09; 二、問題…

Gemini 2.5 Pro與Claude 3.7 Sonnet編程性能對比

AI領域的語言模型競賽日趨白熱化,尤其在編程輔助方面表現突出。 Gemini 2.5 Pro和Claude 3.7 Sonnet作為該領域的佼佼者,本文通過一系列編程測試與基準評估對兩者的編碼功能進行對比分析。 核心結論: ? Gemini 2.5 Pro在SWE Bench硬核編程測試中以63.8%的通過率略勝Clau…

On Superresolution Effects in Maximum Likelihood Adaptive Antenna Arrays論文閱讀

On Superresolution Effects in Maximum Likelihood Adaptive Antenna Arrays 1. 論文的研究目標與實際問題意義1.1 研究目標1.2 解決的實際問題1.3 實際意義2. 論文提出的新方法、模型與公式2.1 核心創新:標量化近似表達式關鍵推導步驟:公式優勢:2.2 與經典方法的對比傳統方…

GIT 撤銷上次推送

注意&#xff1a;在執行下述操作之前先備份現有工作進度&#xff0c;如果不慎未保存&#xff0c;在代碼編輯器中正在修改的文件下&#xff0c;使用CtrlZ 撤銷試試 撤銷推送的方法 情況 1&#xff1a;您剛剛推送到遠程倉庫 如果您的推送操作剛剛完成&#xff0c;并且沒有其他…

透視飛鶴2024財報:如何打贏奶粉罐里的科技戰?

去年乳制品行業壓力還是不小的&#xff0c;尼爾森IQ指出2024年國內乳品市場仍處在收縮區間。但是&#xff0c;總有龍頭能抗住壓力&#xff0c;飛鶴最近交出的2024財報中就有很多亮點。 比如&#xff0c;2024年飛鶴營收207.5億元、同比增長6%&#xff0c;凈利潤36.5億元&#x…

解決STM32CubeMX中文注釋亂碼

本人采用【修改系統環境變量】的方法 1. 使用快捷鍵 win X&#xff0c;打開【系統R】&#xff0c;點擊【高級系統設置】 2. 點擊【環境變量】 3. 點擊【新建】 4.按圖中輸入【JAVA_TOOL_OPTIONS】和【-Dfile.encodingUTF-8】&#xff0c;新建環境變量后重啟CubeMX即可。 解釋…

使用typescript實現游戲中的JPS跳點尋路算法

JPS是一種優化A*算法的路徑規劃算法&#xff0c;主要用于網格地圖&#xff0c;通過跳過不必要的節點來提高搜索效率。它利用路徑的對稱性&#xff0c;只擴展特定的“跳點”&#xff0c;從而減少計算量。 deepseek生成的總是無法完整運行&#xff0c;因此決定手寫一下。 需要注…

Jetpack Compose 狀態管理指南:從基礎到高級實踐

在Jetpack Compose中&#xff0c;界面狀態管理是構建響應式UI的核心。以下是Compose狀態管理的主要概念和實現方式&#xff1a; 基本狀態管理 1. 使用 mutableStateOf Composable fun Counter() {var count by remember { mutableStateOf(0) }Button(onClick { count }) {T…

vant4+vue3上傳一個pdf文件并實現pdf的預覽。使用插件pdf.js

注意下載的插件的版本"pdfjs-dist": "^2.2.228", npm i pdfjs-dist2.2.228 然后封裝一個pdf的遮罩。因為pdf文件有多頁&#xff0c;所以我用了swiper輪播的形式展示。因為用到移動端&#xff0c;手動滑動頁面這樣比點下一頁下一頁的方便多了。 直接貼代碼…

Leetcode hot 100(day 4)

翻轉二叉樹 做法&#xff1a;遞歸即可&#xff0c;注意判斷為空 class Solution { public:TreeNode* invertTree(TreeNode* root) {if(rootnullptr)return nullptr;TreeNode* noderoot->left;root->leftinvertTree(root->right);root->rightinvertTree(node);retu…

C,C++語言緩沖區溢出的產生和預防

緩沖區溢出的定義 緩沖區是內存中用于存儲數據的一塊連續區域&#xff0c;在 C 和 C 里&#xff0c;常使用數組、指針等方式來操作緩沖區。而緩沖區溢出指的是當程序向緩沖區寫入的數據量超出了該緩沖區本身能夠容納的最大數據量時&#xff0c;額外的數據就會覆蓋相鄰的內存區…

大數據(4)Hive數倉三大核心特性解剖:面向主題性、集成性、非易失性如何重塑企業數據價值?

目錄 背景&#xff1a;企業數據治理的困境與破局一、Hive數據倉庫核心特性深度解析1. ?面向主題性&#xff08;Subject-Oriented&#xff09;&#xff1a;從業務視角重構數據?2. ?集成性&#xff08;Integrated&#xff09;&#xff1a;打破數據孤島的統一視圖?3. ?非易失…

A股復權計算_前復權數據計算_終結章

目錄 前置&#xff1a; 計算方法推導 數據&#xff1a; 代碼&#xff1a; 視頻&#xff1a; 前置&#xff1a; 1 本系列將以 “A股復權計算_” 開頭放置在“隨想”專欄 2 權息數據結合 “PostgreSQL_” 系列博文中的股票未復權數據&#xff0c;可以自行計算復權日數據 …

Nature:新發現!首次闡明大腦推理神經過程

人類具有快速適應不斷變化的環境的認知能力。這種能力的核心是形成高級、抽象表示的能力&#xff0c;這些表示利用世界上的規律來支持泛化。然而&#xff0c;關于這些表征如何在神經元群中編碼&#xff0c;它們如何通過學習出現以及它們與行為的關系&#xff0c;人們知之甚少。…

Kotlin 集合函數:map 和 first 的使用場景

Kotlin 提供了豐富的集合操作函數&#xff0c;使開發者可以更加簡潔、高效地處理數據。其中&#xff0c;map 和 first 是兩個常用的函數&#xff0c;分別用于轉換集合和獲取集合中的第一個元素。 1. map 的使用場景 場景 1&#xff1a;對象列表轉換 在開發中&#xff0c;我們…

EIR管理中IMEI和IMSI信息的作用

在EIR&#xff08;設備身份注冊&#xff09;管理中&#xff0c;IMEI&#xff08;國際移動設備身份碼&#xff09;和IMSI&#xff08;國際移動用戶識別碼&#xff09;各自具有重要作用&#xff0c;以下是詳細介紹&#xff1a; IMEI的作用 設備身份識別&#xff1a;IMEI是移動設…

MAUI開發第一個app的需求解析:登錄+版本更新,用于喂給AI

vscode中MAUI框架已經搭好,用MAUI+c#webapi+orcl數據庫開發一個app, 功能是兩個界面一個登錄界面,登錄注冊常用功能,另一個主窗體,功能先空著,顯示“主要功能窗體”。 這是一個全新的功能,需要重零開始涉及所有數據表 登錄后檢查是否有新版本程序,自動更新功能。 1.用戶…

KUKA機器人查看運行日志的方法

對于KUKA機器人的運行日志都是可以查看和導出的&#xff0c;方便查找問題。KUKA機器人的運行日志查看方法如下&#xff1a; 1、在主菜單下&#xff0c;選擇【診斷】-【運行日志】-【顯示】下打開&#xff1b; 2、顯示出之前的機器人運行日志&#xff1b; 3、也可以通過【過濾器…