ホームページ >Java >&#&チュートリアル >Java @SentinelResource サンプルコード分析
Module:cloudalibaba-sentinel-service8401
Pom 新しい依存関係
<dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity --> <groupId>com.atguigu.springcloud</groupId> <artifactId>cloud-api-common</artifactId> <version>${project.version}</version> </dependency>
この依存関係は、独自のテンプレートから取得されます。この依存関係は、データベース クエリのビジネス処理の一部です
新しいコントローラー
@RestController public class RateLimitController { @GetMapping("/byResource") @SentinelResource(value = "byResource",blockHandler = "handleException") public CommonResult byResource() { return new CommonResult(200,"按资源名称限流测试OK",new Payment(2020L,"serial001")); } public CommonResult handleException(BlockException exception) { return new CommonResult(444,exception.getClass().getCanonicalName()+"\t 服务不可用"); } }##グラフィック構成とコードの関係
## は、1 秒間のクエリ数が 1 より大きいことを意味します。その後、カスタム フローに移動してフローを制限します。
テスト 1 1 秒間に 1 回クリックします。 , OK上記を超え、狂ったようにクリックされ、独自に定義した電流制限処理情報が返され、電流制限が発生しましたURL アドレスによる電流制限その後の処理
アクセスされた URL を介して電流を制限すると、Sentinel によって提供されるデフォルトの電流制限処理情報が返されますコントローラーは次のように変更されます:@RestController public class RateLimitController { @GetMapping("/byResource") @SentinelResource(value = "byResource",blockHandler = "handleException") public CommonResult byResource() { return new CommonResult(200,"按资源名称限流测试OK",new Payment(2020L,"serial001")); } public CommonResult handleException(BlockException exception) { return new CommonResult(444,exception.getClass().getCanonicalName()+"\t 服务不可用"); } @GetMapping("/rateLimit/byUrl") @SentinelResource(value = "byUrl") public CommonResult byUrl() { return new CommonResult(200,"按url限流测试OK",new Payment(2020L,"serial002")); } }Test 2
一度アクセスしてくださいhttp://localhost:8401/rateLimit/byUrl通常
クレイジークリック http:// localhost:8401/rateLimit/ byUrl
Sentinel 独自の電流制限処理結果が返されます
上記の解決策が直面する問題1システムのデフォルト、いいえ 当社独自のビジネス要件を反映します。 2 現状では、カスタマイズされた処理方法がビジネスコードと結合しているため、直感的ではありません。 3 各ビジネス メソッドに注意事項を追加すると、コードが肥大化します。 4 グローバル統一処理方式は反映されません。 顧客定義の電流制限処理ロジック電流制限処理ロジックをカスタマイズするための CustomerBlockHandler クラスを作成しますテスト後、カスタマイズしました追加コントロール クラスへの新しいビジネス@GetMapping("/rateLimit/customerBlockHandler") @SentinelResource(value = "customerBlockHandler", blockHandlerClass = CustomerBlockHandler.class, blockHandler = "handleException2") public CommonResult customerBlockHandler() { return new CommonResult(200,"按客户自定义限流处理逻辑"); }一般的な電流制限処理ロジックのカスタマイズ
blockHandlerClass = CustomerBlockHandler.class
blockHandler = handleException2テスト 3上記の構成: バックアップ処理用に CustomerBlockHandler クラスの handleException2 メソッドを見つけて、一般的な電流制限処理ロジックを定義します
##テスト後、カスタマイズしました
#
以上がJava @SentinelResource サンプルコード分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。