Heim >Java >javaLernprogramm >Beispielcodeanalyse für Java @SentinelResource

Beispielcodeanalyse für Java @SentinelResource

WBOY
WBOYnach vorne
2023-05-05 13:31:161316Durchsuche

Fluss nach Ressourcennamen begrenzen und nachfolgende Verarbeitung hinzufügen

Modul: cloudalibaba-sentinel-service8401

pom neue Abhängigkeit

  <dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
            <groupId>com.atguigu.springcloud</groupId>
            <artifactId>cloud-api-common</artifactId>
            <version>${project.version}</version>
        </dependency>

Diese Abhängigkeit stammt aus Ihrer eigenen Vorlage. Diese Abhängigkeit hier ist Teil der Geschäftsverarbeitung von Datenbankabfragen

Neu Controller

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

Beispielcodeanalyse für Java @SentinelResource

Grafikkonfiguration und Codebeziehung

Beispielcodeanalyse für Java @SentinelResource

bedeutet, dass die Anzahl der Abfragen in 1 Sekunde größer als 1 ist, also gehen wir zu unserem benutzerdefinierten Fluss und begrenzen den Fluss

Test 1

Klicken Sie auf 1 in 1 Sekunde Weiter, OK

Oben überschritten, wie verrückt geklickt und die selbst definierten aktuellen Begrenzungsverarbeitungsinformationen zurückgegeben URL zur Begrenzung des Stroms, Sentinel wird zurückgegeben. Kommt mit standardmäßigen Verarbeitungsinformationen zur Strombegrenzung.

Controller geändert zu: Beispielcodeanalyse für Java @SentinelResource

@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

Einmal besuchen

http://localhost:8401/rateLimit/byUrl

Normal

Klicken Sie wie verrückt auf http:// localhost:8401/rateLimit/byUrl

Beispielcodeanalyse für Java @SentinelResource, um die aktuellen, einschränkenden Verarbeitungsergebnisse von Sentinel zurückzugeben Anforderungen.

2 Entsprechend den bestehenden Bedingungen ist unsere individuelle Verarbeitungsmethode mit dem Geschäftscode gekoppelt, was nicht intuitiv ist.

3 Wenn jeder Geschäftsmethode ein Cover hinzugefügt wird, wird die Code-Aufblähung zunehmen. Beispielcodeanalyse für Java @SentinelResource

4 Die globale einheitliche Verarbeitungsmethode wird nicht widergespiegelt.

Kundendefinierte strombegrenzende Verarbeitungslogik

Erstellen Sie die CustomerBlockHandler-Klasse zum Anpassen der strombegrenzenden Verarbeitungslogik.

Nach dem Testen haben wir sie angepasst.

Fügen Sie der Steuerklasse ein neues Geschäft hinzu

blockHandlerClass = CustomerBlockHandler.class

blockHandler = handleException2

Die obige Konfiguration: Suchen Sie die handleException2-Methode in der CustomerBlockHandler-Klasse für die Sicherungsverarbeitung und definieren Sie die allgemeine Strombegrenzungsverarbeitungslogik.

Test 3

Test Endlich haben wir es angepasst

Das obige ist der detaillierte Inhalt vonBeispielcodeanalyse für Java @SentinelResource. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen