SentinelResource註解

Sentinel 註解

Sentinel 提供了 @SentinelResource 註解用於定義資源,並提供了AspectJ 的擴展用於自動定義資源、處理 BlockException 等。
使用 Sentinel Annotation AspectJ Extension的時候需要引入 sentinel的aop依賴

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-annotation-aspectj</artifactId>
    <version>x.y.z</version>
</dependency>
@Configuration
public class AopConfiguration {
    @Bean
    public SentinelResourceAspect sentinelResourceAspect() {
        // 可以定義自己的資源訪問規則
        return new SentinelResourceAspect();
    }
}

@SentinelResource 用於定義資源,並提供可選的異常處理和fallback配置項。@SentinelResource` 包含以下屬性:

value:資源名稱,必需項(不能爲空)
entryType:entry 類型,可選項(默認爲 EntryType.OUT
blockHandler / blockHandlerClass: blockHandler 對應處理 BlockException的函數名稱,可選項。blockHandler 函數訪問範圍需要是 public,返回類型需要與原方法相匹配,參數類型需要和原方法相匹配並且最後加一個額外的參數,類型爲 BlockExceptionblockHandler 函數默認需要和原方法在同一個類中。若希望使用其他類的函數,則可以指定 blockHandlerClass 爲對應的類的 Class對象,注意對應的函數必需爲static 函數,否則無法解析。
fallback:fallback函數名稱,可選項,用於在拋出異常的時候提供 fallback 處理邏輯。fallback 函數可以針對所有類型的異常(除了 exceptionsToIgnore裏面排除掉的異常類型)進行處理。fallback

  • 函數簽名和位置要求:
    返回值類型必須與原函數返回值類型一致;
    方法參數列表需要和原函數一致,或者可以額外多一個 Throwable 類型的參數用於接收對應的異常。
    fallback 函數默認需要和原方法在同一個類中。若希望使用其他類的函數,則可以指定 fallbackClass 爲對應的類的 Class 對象,注意對應的函數必需爲 static 函數,否則無法解析。
    defaultFallback:默認的 fallback函數名稱,可選項,通常用於通用的 fallback 邏輯(即可以用於很多服務或方法)。默認 fallback 函數可以針對所有類型的異常(除了 exceptionsToIgnore 裏面排除掉的異常類型)進行處理。若同時配置了 fallbackdefaultFallback,則只有 fallback 會生效。defaultFallback 函數簽名要求:

  • 返回值類型必須與原函數返回值類型一致;
    方法參數列表需要爲空,或者可以額外多一個 Throwable 類型的參數用於接收對應的異常。
    defaultFallback函數默認需要和原方法在同一個類中。若希望使用其他類的函數,則可以指定 fallbackClass 爲對應的類的 Class 對象,注意對應的函數必需爲 static 函數,否則無法解析。
    exceptionsToIgnore 用於指定哪些異常被排除掉,不會計入異常統計中,也不會進入 fallback 邏輯中,而是會原樣拋出。

特別地,若 blockHandlerfallback 都進行了配置,則被限流降級而拋出 BlockException 時只會進入blockHandler 處理邏輯。若未配置 blockHandler、fallbackdefaultFallback,則被限流降級時會將 BlockException 直接拋出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章