注1:
@SentinelResource:
@SentinelResourceは、リソースを定義し、オプションの例外処理とフォールバック構成アイテムを提供するために使用されます。
属性
|
効果 |
値
|
リソース名
|
entryType
|
トラフィックの方向を示す
エントリタイプ、値は
IN / OUT
、デフォルトは
OUT
|
blockHandler
|
BlockException
を処理する関数
の名前
、
関数要件:
1.
公開する
必要があります
2.
戻り値の型パラメーターは元のメソッドと一致しています
3.デフォルトのメソッドは、元のメソッドと同じクラスにある必要があります。あなたが他のクラスの機能を使用する場合は、blockHandlerClassを設定することができます
し、指定
のメソッド
blockHandlerClassを
。
|
blockHandlerClass
|
blockHandler
クラスを
格納する
場合
、対応するハンドラーは
静的に
変更する必要があります
。
|
後退する
|
例外がスローされたときに
フォールバック
処理ロジック
を提供するために使用されます。
フォールバック関数は、すべてのタイプの例外を
処理できます(
exceptionsToIgnoreで除外された例外タイプを除く)。機能要件:
1.
戻り値の型は元のメソッドと一致しています
2.
パラメータタイプは元のメソッドと一致する必要があります
3.デフォルトのメソッドは、元のメソッドと同じクラスにある必要があります。あなたが他のクラスの機能を使用する場合は、fallbackClassを設定することができます
し、指定
のメソッド
fallbackClassを
。
|
fallbackClass
|
フォールバック
を
格納するクラス。対応する処理関数は
静的に
変更する必要があります
。
|
defaultFallback
|
一般的な
フォールバック
ロジックに
使用されます。デフォルトの
フォールバック関数は、すべてのタイプの例外を処理できます。
フォールバック
と
defaultFallbackの
両方が構成されている
場合、
フォールバックが優先されます。機能要件:
1.
戻り値の型は元のメソッドと一致しています
2.
メソッドパラメータリストが空であるか、
Throwable
タイプのパラメータがあります。
3.デフォルトのメソッドは、元のメソッドと同じクラスにある必要があります。あなたが他のクラスの機能を使用する場合は、fallbackClassを設定することができます
し、指定
のメソッド
fallbackClassを
。
|
exceptionsToIgnore
|
除外する例外を指定します。除外された例外は、例外統計にカウントされず、フォールバック
ロジックにも入りませんが、そのまま
スローされます。
|
exceptionsToTrace
|
トレース
が必要な
例外
|
現在の制限とダウングレード後の処理クラスとメソッドを定義します。
注:現在のクラスでメソッドを直接記述できますが、再利用性は低くなります(非推奨)。
処理クラスを定義すると再利用性を向上させることができますが、メソッドは静的である必要があります(非常に重要です)。
@SentinelResourceをインターフェースまたはメソッドのリソースとして使用し、 値、blockHandlerClass、blockHandler、fallbackClass、fallback属性を構成します。
新しいOrderServiceImpl3BlockHandlerClassクラスを作成します。
// BlockException 异常接口,其子类为Sentinel五种规则异常的实现类:
// AuthorityException 授权异常
// DegradeException 降级异常
// FlowException 限流异常
// ParamFlowException 参数限流异常
// SystemBlockException 系统负载异常
@Slf4j
public class OrderServiceImpl3BlockHandlerClass {//定义BlockException处理类
//注意:必须加上static修饰
public static String blockHandler(BlockException ex) {
log.error("{}", ex);
return "接口被限流或者降级了...";
}
}
新しいOrderServiceImpl3FallbackClassクラスを作成します。
@Slf4j
public class OrderServiceImpl3FallbackClass {//定义Throwable处理类
//Throwable时进入的方法
public static String fallback(Throwable throwable) {
log.error("{}", throwable);
return "接口发生异常了...";
}
}
OrderServiceImpl3类:
@Service
@Slf4j
public class OrderServiceImpl3 {
int i = 0;
/*
@SentinelResource("资源名")注解: 用于指定本地资源(接口)并配置相应的流控规则.
*/
@SentinelResource(value = "/message5",//资源名
blockHandlerClass = OrderServiceImpl3BlockHandlerClass.class,//可以指定外部类
blockHandler = "blockHandler",//发生BlockException时调用,本类没有则须指定blockHandlerClass
fallbackClass = OrderServiceImpl3FallbackClass.class,//可以指定外部类
fallback = "fallback")//发生Throwable时调用,本类没有则须指定fallbackClass
public String message5() {
i++; //每次调用接口i就+1;所以i从1,2,3,4递增,每次递增1
if ( i % 3 == 0 ) {
throw new RuntimeException();
}//每过3次就触发一次异常,接口就会调用失败
return "message5";
}
// //直接在本类定义发生BlockException时进入的方法(复用性低,不建议)
// public String blockHandler(BlockException ex) {
// log.error("{}", ex);
// return "接口被限流或者降级了...";
// }
// //直接在本类定义发生Throwable时进入的方法(复用性低,不建议)
// public String fallback(Throwable throwable) {
// log.error("{}", throwable);
// return "接口发生异常了...";
// }
}