NepxionDiscoveryの調査ノート4Sentinelトラフィックガード/サービスフォールトトレランス統合ソリューション

注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 "接口发生异常了...";
//	}
}

 

おすすめ

転載: blog.csdn.net/weixin_42585386/article/details/109239725