ホームページ >Java >&#&チュートリアル >Java @SentinelResource サンプルコード分析

Java @SentinelResource サンプルコード分析

WBOY
WBOY転載
2023-05-05 13:31:161315ブラウズ

リソース名によってフローを制限し、後続の処理を追加します

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 服务不可用");
    }
}

Java @SentinelResource サンプルコード分析

##グラフィック構成とコードの関係

## は、1 秒間のクエリ数が 1 より大きいことを意味します。その後、カスタム フローに移動してフローを制限します。 Java @SentinelResource サンプルコード分析

テスト 1

1 秒間に 1 回クリックします。 , OK

上記を超え、狂ったようにクリックされ、独自に定義した電流制限処理情報が返され、電流制限が発生しました

URL アドレスによる電流制限その後の処理Java @SentinelResource サンプルコード分析

アクセスされた 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/ byUrlJava @SentinelResource サンプルコード分析

Sentinel 独自の電流制限処理結果が返されますJava @SentinelResource サンプルコード分析

上記の解決策が直面する問題

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

上記の構成: バックアップ処理用に CustomerBlockHandler クラスの handleException2 メソッドを見つけて、一般的な電流制限処理ロジックを定義します

テスト 3

Java @SentinelResource サンプルコード分析

##テスト後、カスタマイズしました

Java @SentinelResource サンプルコード分析#

以上がJava @SentinelResource サンプルコード分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。