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
,返回類型需要與原方法相匹配,參數類型需要和原方法相匹配並且最後加一個額外的參數,類型爲 BlockException
。blockHandler
函數默認需要和原方法在同一個類中。若希望使用其他類的函數,則可以指定 blockHandlerClass
爲對應的類的 Class
對象,注意對應的函數必需爲static
函數,否則無法解析。
fallback:fallback
函數名稱,可選項,用於在拋出異常的時候提供 fallback 處理邏輯。fallback 函數可以針對所有類型的異常(除了 exceptionsToIgnore
裏面排除掉的異常類型)進行處理。fallback
-
函數簽名和位置要求:
返回值類型必須與原函數返回值類型一致;
方法參數列表需要和原函數一致,或者可以額外多一個Throwable
類型的參數用於接收對應的異常。
fallback
函數默認需要和原方法在同一個類中。若希望使用其他類的函數,則可以指定fallbackClass
爲對應的類的Class
對象,注意對應的函數必需爲static
函數,否則無法解析。
defaultFallback
:默認的fallback
函數名稱,可選項,通常用於通用的fallback
邏輯(即可以用於很多服務或方法)。默認fallback
函數可以針對所有類型的異常(除了exceptionsToIgnore
裏面排除掉的異常類型)進行處理。若同時配置了fallback
和defaultFallback
,則只有fallback
會生效。defaultFallback
函數簽名要求: -
返回值類型必須與原函數返回值類型一致;
方法參數列表需要爲空,或者可以額外多一個Throwable
類型的參數用於接收對應的異常。
defaultFallback
函數默認需要和原方法在同一個類中。若希望使用其他類的函數,則可以指定 fallbackClass 爲對應的類的 Class 對象,注意對應的函數必需爲 static 函數,否則無法解析。
exceptionsToIgnore
用於指定哪些異常被排除掉,不會計入異常統計中,也不會進入 fallback 邏輯中,而是會原樣拋出。
特別地,若 blockHandler
和 fallback
都進行了配置,則被限流降級而拋出 BlockException
時只會進入blockHandler
處理邏輯。若未配置 blockHandler、fallback
和defaultFallback
,則被限流降級時會將 BlockException
直接拋出。