Sentinel使用實例

不說了,直接上官方文檔

https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/readme-zh.md

Sentinel Example

項目說明

本項目演示如何使用 Sentinel starter 完成 Spring Cloud 應用的限流管理。

Sentinel 是阿里巴巴開源的分布式系統的流量防衛組件,Sentinel 把流量作為切入點,從流量控制,熔斷降級,系統負載保護等多個維度保護服務的穩定性。

示例

如何接入

在啟動示例進行演示之前,我們先了解一下如何接入 Sentinel。

注意:本章節只是為了便于您理解接入方式,本示例代碼中已經完成接入工作,您無需再進行修改。

  1. 首先,修改 pom.xml 文件,引入 Sentinel starter。
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
  1. 接入限流埋點

    • HTTP 埋點

      Sentinel starter 默認為所有的 HTTP 服務提供了限流埋點,如果只想對 HTTP 服務進行限流,那么只需要引入依賴,無需修改代碼。

    • 自定義埋點

      如果需要對某個特定的方法進行限流或降級,可以通過 @SentinelResource 注解來完成限流的埋點,示例代碼如下:

      @SentinelResource("resource")
      public String hello() {return "Hello";
      }
      

      當然也可以通過原始的 SphU.entry(xxx) 方法進行埋點,可以參見 Sentinel 文檔。

  2. 配置限流規則

    Sentinel 提供了兩種配置限流規則的方式:代碼配置 和 控制臺配置。本示例使用的方式為通過控制臺配置。

    1. 通過代碼來實現限流規則的配置。一個簡單的限流規則配置示例代碼如下,更多限流規則配置詳情請參考 Sentinel 文檔。
    List<FlowRule> rules = new ArrayList<FlowRule>();
    FlowRule rule = new FlowRule();
    rule.setResource(str);
    // set limit qps to 10
    rule.setCount(10);
    rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
    rule.setLimitApp("default");
    rules.add(rule);
    FlowRuleManager.loadRules(rules);
    
    1. 通過控制臺進行限流規則配置請參考文章后面的圖文說明。

啟動 Sentinel 控制臺

  1. 首先需要獲取 Sentinel 控制臺,支持直接下載和源碼構建兩種方式。

    1. 直接下載:下載 Sentinel 控制臺
    2. 源碼構建:進入 Sentinel Github 項目頁面,將代碼 git clone 到本地自行編譯打包,參考此文檔。
  2. 啟動控制臺,執行 Java 命令 java -jar sentinel-dashboard.jar完成 Sentinel 控制臺的啟動。
    控制臺默認的監聽端口為 8080。Sentinel 控制臺使用 Spring Boot 編程模型開發,如果需要指定其他端口,請使用 Spring Boot 容器配置的標準方式,詳情請參考 Spring Boot 文檔。

應用啟動

  1. 增加配置,在應用的 /src/main/resources/application.properties 中添加基本配置信息

    spring.application.name=sentinel-example
    server.port=18083
    spring.cloud.sentinel.transport.dashboard=localhost:8080
    
  2. 啟動應用,支持 IDE 直接啟動和編譯打包后啟動。

    1. IDE直接啟動:找到主類 ServiceApplication,執行 main 方法啟動應用。
    2. 打包編譯后啟動:首先執行 mvn clean package 將工程編譯打包,然后執行 java -jar sentinel-core-example.jar啟動應用。

調用服務

使用 curl 分別調用兩個 URL,可以看到訪問成功。

配置限流規則并驗證

  1. 訪問 http://localhost:8080 頁面,可以在左側看到 Sentinel-Example 應用已經注冊到了控制臺,單擊 流控規則 ,可以看到目前的流控規則為空。

注意:如果您在控制臺沒有找到應用,請調用一下進行了 Sentinel 埋點的 URL 或方法,因為 Sentinel 使用了 lazy load 策略。詳細的排查過程請參見 Sentinel FAQ。

  1. 配置 URL 限流規則:點擊新增流控規則,資源名填寫需要限流的 URL 相對路徑,單機閾值選擇需要限流的閾值,點擊新增進行確認。(為了便于演示效果,這里將值設置成了 1)。

  2. 配置自定義限流規則:點擊新增流控規則,資源名填寫 @SentinelResource 注解 value 字段的值,單機閾值選擇需要限流的閾值,點擊新增進行確認。(為了便于演示效果,這里將值設置成了 1)。

  3. 訪問 URL,當 QPS 超過 1 時,可以看到限流效果如下。

自定義限流處理邏輯

  • 默認限流異常處理

URL 限流觸發后默認處理邏輯是,直接返回 “Blocked by Sentinel (flow limiting)”。
如果需要自定義處理邏輯,實現的方式如下:

public class CustomUrlBlockHandler implements UrlBlockHandler {@Overridepublic void blocked(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException {// todo add your logic}
}WebCallbackManager.setUrlBlockHandler(new CustomUrlBlockHandler());
  • 使用 @SentinelResource 注解下的限流異常處理

如果需要自定義處理邏輯,填寫 @SentinelResource 注解的 blockHandler 屬性(針對所有類型的 BlockException,需自行判斷)或 fallback 屬性(針對熔斷降級異常),注意對應方法的簽名和位置有限制,詳情見 Sentinel 注解支持文檔。示例實現如下:

public class TestService {// blockHandler 是位于 ExceptionUtil 類下的 handleException 靜態方法,需符合對應的類型限制.@SentinelResource(value = "test", blockHandler = "handleException", blockHandlerClass = {ExceptionUtil.class})public void test() {System.out.println("Test");}// blockHandler 是位于當前類下的 exceptionHandler 方法,需符合對應的類型限制.@SentinelResource(value = "hello", blockHandler = "exceptionHandler")public String hello(long s) {return String.format("Hello at %d", s);}public String exceptionHandler(long s, BlockException ex) {// Do some log here.ex.printStackTrace();return "Oops, error occurred at " + s;}
}
public final class ExceptionUtil {public static void handleException(BlockException ex) {System.out.println("Oops: " + ex.getClass().getCanonicalName());}
}

一個簡單的 @SentinelResource 示例可以見 sentinel-demo-annotation-spring-aop。

Endpoint 信息查看

Spring Boot 應用支持通過 Endpoint 來暴露相關信息,Sentinel Starter 也支持這一點。

在使用之前需要在 Maven 中添加 spring-boot-starter-actuator依賴,并在配置中允許 Endpoints 的訪問。

  • Spring Boot 1.x 中添加配置 management.security.enabled=false
  • Spring Boot 2.x 中添加配置 management.endpoints.web.exposure.include=*

Spring Boot 1.x 可以通過訪問 http://127.0.0.1:18083/sentinel 來查看 Sentinel Endpoint 的信息。Spring Boot 2.x 可以通過訪問 http://127.0.0.1:18083/actuator/sentinel 來訪問。

查看實時監控

Sentinel 控制臺支持實時監控查看,您可以通過 Sentinel 控制臺查看各鏈路的請求的通過數和被限流數等信息。
其中 p_qps 為通過(pass) 流控的 QPS,b_qps 為被限流 (block) 的 QPS。

ReadableDataSource 支持

Sentinel 內部提供了動態規則的擴展實現 ReadableDataSource。

Sentinel starter 整合了目前存在的幾類 ReadableDataSource。只需要在配置文件中進行相關配置,即可在 Spring 容器中自動注冊 DataSource。

比如要定義兩個ReadableDataSource,分別是 FileRefreshableDataSourceNacosDataSource,配置如下:

spring.cloud.sentinel.datasource.ds1.file.file=classpath: degraderule.json
spring.cloud.sentinel.datasource.ds1.file.data-type=jsonspring.cloud.sentinel.datasource.ds2.nacos.server-addr=localhost:8848
spring.cloud.sentinel.datasource.ds2.nacos.dataId=sentinel
spring.cloud.sentinel.datasource.ds2.nacos.groupId=DEFAULT_GROUP
spring.cloud.sentinel.datasource.ds2.nacos.data-type=json

ds1ds2 表示ReadableDataSource的名稱,可隨意編寫。ds1ds2 后面的 filenacos 表示ReadableDataSource的類型。

目前支持file, nacos, zk, apolloredis 這5種類型。

其中nacoszkapolloredis 這4種類型的使用需要加上對應的依賴sentinel-datasource-nacos, sentinel-datasource-zookeeper, sentinel-datasource-apollo, sentinel-datasource-redis

當ReadableDataSource加載規則數據成功的時候,控制臺會打印出相應的日志信息:

[Sentinel Starter] DataSource ds1-sentinel-file-datasource load 3 DegradeRule
[Sentinel Starter] DataSource ds2-sentinel-nacos-datasource load 2 FlowRule

More

Sentinel 是一款功能強大的中間件,從流量控制,熔斷降級,系統負載保護等多個維度保護服務的穩定性。此 Demo 僅演示了 使用 Sentinel 作為限流工具的使用,更多 Sentinel 相關的信息,請參考 Sentinel 項目。

如果您對 spring cloud sentinel starter 有任何建議或想法,歡迎在 issue 中或者通過其他社區渠道向我們提出。

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

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

相關文章

【金融量化】對企業進行估值的方法有哪些?

估值的方法有哪些&#xff1f; 如何對企業進行估值&#xff1f;有2個方法估算。 1 絕對估值法 它是一種定價模型&#xff0c;用于計算企業的內在價值。 比如說你可以根據公司近N年的現金流情況。借此去預測未來N年的現金流情況。所有的現金流數據都可以在年報上查詢到。最后…

ios 知識

IOS 類文件.h和.m中interface的區別 大家都知道我們在創建類文件時會發現&#xff1a; #import <UIKit/UIKit.h>interface ViewController : UIViewControllerend和 #import "ViewController.h"interface ViewController ()end那么他們之間有何區別呢&#x…

【Ajax】回調地獄解決方法

回調地獄&#xff08;Callback Hell&#xff09;是指在異步編程中&#xff0c;特別是在嵌套的回調函數中&#xff0c;代碼變得深度嵌套、難以閱讀和維護的現象。這通常發生在處理多個異步操作時&#xff0c;每個操作都依賴于前一個操作的結果。回調地獄使代碼變得難以理解、擴展…

顯卡服務器適用于哪些場景

顯卡&#xff08;GPU&#xff09;服務器&#xff0c;簡單來說&#xff0c;GPU服務器是基于GPU的應用于視頻編解碼、深度學習、科學計算等多種場景的快速、 穩定、彈性的計算服務。那么壹基比小鑫告訴你顯卡服務器主要的用途有哪一些。 一、運行手機模擬器 顯卡服務器可支持…

力扣:62. 不同路徑(Python3)

題目&#xff1a; 一個機器人位于一個 m x n 網格的左上角 &#xff08;起始點在下圖中標記為 “Start” &#xff09;。 機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角&#xff08;在下圖中標記為 “Finish” &#xff09;。 問總共有多少條不同的路徑&…

WebRTC音視頻通話-WebRTC本地視頻通話使用ossrs服務搭建

iOS開發-ossrs服務WebRTC本地視頻通話服務搭建 之前開發中使用到了ossrs&#xff0c;這里記錄一下ossrs支持的WebRTC本地服務搭建。 一、ossrs是什么&#xff1f; ossrs是什么呢&#xff1f; SRS(Simple Realtime Server)是一個簡單高效的實時視頻服務器&#xff0c;支持RTM…

STM32CubeIDE的安裝和黑色主題及自動補全代碼

STM32CubeIDE之前用過一點時間&#xff0c;但后來因為不習慣放棄了最近在新電腦上又用起來了&#xff0c;感覺相對之前好了很多&#xff0c;其實如果在工作中基本使用的是STM32,用意法的生態軟件也挺好的&#xff0c;意法最近在這塊也在大力發展&#xff0c;STM32CubeIDE安裝包…

【BASH】回顧與知識點梳理(十三)

【BASH】回顧與知識點梳理 十三 十三. 文件內容查閱13.1 直接檢視文件內容&#xff1a;cat, tac, nlcat (concatenate)tac (反向列示)nl (添加行號打印) 13.2 可翻頁檢視&#xff1a;more, lessmore (一頁一頁翻動)less (一頁一頁翻動) 13.3 資料擷取&#xff1a;head, tailhea…

【Linux】云服務器自動化部署VuePress博客(Jenkins)

前言 博主此前是將博客部署在 Github Pages&#xff08;基于 Github Action&#xff09;和 Vercel 上的&#xff0c;但是這兩種部署方式對于國內用戶很不友好&#xff0c;訪問速度堪憂。因此將博客遷移到自己的云服務器上&#xff0c;并且基于 Jenkins&#xff08;一款開源持續…

浪涌保護器中SPD防雷模塊的主要應用方案

浪涌保護器&#xff08;Surge Protective Device&#xff0c;SPD&#xff09;是一種用于限制瞬態過電壓和導引泄放電涌電流的非線性防護器件&#xff0c;用以保護耐壓水平低的電器或電子系統免遭雷擊及雷擊電磁脈沖或操作過電壓的損害。SPD可以將過電壓泄放到地線或限制過電壓到…

類與對象(入門)

目錄 1.前言 2.類的引入 3.類的定義 4.類的訪問限定符及封裝 4.1 訪問限定符 4.2 封裝 5.類的作用域 6.類的實例化 7. 結構體內存對齊規則 8.this指針 8.1 this指針的引出 8.2 this指針的特性 1.前言 C 是 基于面向對象 的&#xff0c; 關注 的是 對象 &#xff0c;…

【Spring】核心容器——依賴自動裝配

Spring容器根據bean所依賴的資源在容器中自動查找并注入bean的過程叫做自動裝配自動裝配的方式 1、按類型 2、按名稱&#xff08;耦合性較高&#xff09; 3、按構造方法 自動裝配特點 1、自動裝配用于對引用類型進行依賴注入&#xff0c;不能對簡單類型進行操作 2、自動裝配的…

多元最短路(Floyd)

是一個基于動態規劃的全源最短路算法。它可以高效地求出圖上任意兩點之間的最短路 時間復雜度 O(n^3) 狀態轉移方程 f[i][j]min(f[i][j],f[i][k]f[k][j]) 核心代碼 void floyd(){for(int k1;k<n;k)for(int i1;i<n;i)for(int j1;j<n;j)s[i][j]min(s[i][j],s[i][k…

Vue前端 更具router.js 中的meta的roles實現路由衛士,實現權限判斷。

參考了之篇文章 1、我在登陸時獲取到登錄用戶的角色名roles&#xff0c;并存入sessionStorage中&#xff0c;具體是在login頁面實現&#xff0c;還是在menu頁面實現都可以。在menu頁面實現&#xff0c;可以顯得登陸快一些。 2、編寫router.js&#xff0c;注意&#xff0c;一個…

Spring 事務詳解

目錄 一、概述二、事務的特性&#xff08;ACID&#xff09;三、Spring 的事務管理3.1 編程式事務管理3.2 編程式事務管理 四、Spring 事務管理接口及其定義的屬性4.1 PlatformTransactionManager:事務管理接口4.2 TransactionDefinition:事務屬性4.3 TransactionStatus:事務狀態…

【基礎類】—前后端通信類系統性學習

一、什么是同源策略及限制 同源策略限制從一個源加載的文檔或腳本如何與來自另一個源的資源進行交互。這是一個用于隔離潛在惡意文件的關鍵的安全機制。源&#xff1a;協議、域名和端口&#xff0c; 默認端口是80 三者有一個不同&#xff0c;即源不同&#xff0c;就是跨域 ht…

Stable Diffusion+Temporal-kit 半虛半實應用

1.先下載temporal-kit,重啟webui 2.下載好ffmpeg,配置好環境,下載Ebsynth 3.準備好你需要的視頻,拖到預處理視頻位置 4.填寫參數,點解保存設置,然后并點擊生成,會生成到目標文件夾的input位置 5.然后拉出input文件夾里面你想切換成處理的幀圖片,然后填寫prompt查看效…

中國省級、城市-數字經濟創新創業、分項指數(2010-2020年)

一、數據介紹 數據名稱&#xff1a;中國省級、城市-數字經濟創新創業、分項指數 數據年份&#xff1a;2010-2020年 數據范圍&#xff1a;31省、336個城市 數據來源&#xff1a;北大企業大數據研究中心 二、參考文獻 參考文獻&#xff1a; 戴若塵,王艾昭,陳斌開.中國數字…

Win10使用Guest和空密碼訪問共享的完整步驟

目錄 前言 啟動Guest 給予Guest網絡權限 允許空密碼登陸 啟用不安全的來并登陸 總結 前言 我們經常需要使用空密碼和guest賬戶訪問Windows共享&#xff0c;因為某些設備不支持輸入密碼等&#xff0c;那么該如何設置呢&#xff0c;因為步驟比較固定而且繁瑣&#xff0c;于…

Python小白入門:文件、異常處理和json格式存儲數據

這里寫自定義目錄標題 所用資料 一、從文件中讀取數據1.1 讀取整個文件1.2 文件路徑1.3 逐行讀取1.4 創建一個包含文件各行內容的列表1.5 使用文件的內容1.6 包含一百萬位的大型文件1.7 圓周率值中包含你的生日嗎練習題 二、寫入文件2.1 寫入空文件2.2 寫入多行2.3 附加到文件練…