マイクロサービスのセンチネル電流制限サーキットブレーカー(2)—URLリソースのクリーニング

SentinelのHTTPサービスの現在の制限は、デフォルトでSentinel-Web-ServletパッケージのCommonFilterによって実装されています。コードからわかるように、このフィルターはそれぞれの異なるURLを異なるリソースとして扱います。
次のコードでは、{id}パラメーターを持つRESTスタイルのAPIが提供されています。異なる{id}ごとに、URLが異なるため、デフォルトでは、SentinelはすべてのURLをリソースとして扱います。フロー制御。

package com.yuntai.gateway.config;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UrlCleanController {
    
    @GetMapping("/clean/{id}")
    public String clean(int id){
        return "Hello Clean";
    }
}

これにより、2つの問題が発生し
ます。1。現在の制限統計が正確ではありません。実際の需要はクリーンメソッドの合計QPSを制御することであり、結果は各URLのQPSです。2。Sentinel
のリソース数も多すぎます。多く、およびリソース数のデフォルトのしきい値は6000であり、追加のリソースのルールは有効になりません。

この問題を解決するには、UrlCleanerインターフェイスを介してリソースクリーニングを実装できます。つまり、URL / clean / {id}の場合、/ clean / *リソースの下にまとめてグループ化できます。具体的な構成コードは次のとおりです。 UrlCleanerインターフェースとrewritecleanメソッド。

package xxx;

import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.UrlCleaner;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

@Component
public class CustomUrlCleaner implements UrlCleaner {
    @Override
    public String clean(String originUrl) {
        if(StringUtils.isBlank(originUrl)){
            return originUrl;
        }
        if(originUrl.startsWith("/clean/")){
            return "/clean/*";
        }
        return originUrl;
    }
}

バブルアカデミーの著書「SpringCloudAlibaba Microservice PrinciplesandPractices」から抜粋

おすすめ

転載: blog.csdn.net/weixin_39195030/article/details/112726455