Maison > Java > javaDidacticiel > Exemple d'analyse de code Java @SentinelResource

Exemple d'analyse de code Java @SentinelResource

WBOY
Libérer: 2023-05-05 13:31:16
avant
1295 Les gens l'ont consulté

Limiter le flux par nom de ressource et ajouter un traitement ultérieur

Module : cloudalibaba-sentinel-service8401

pom nouvelle dépendance

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

Cette dépendance provient de votre propre modèle. Cette dépendance fait ici partie du traitement métier de la requête de base de données

Nouveau. Contrôleur

@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 服务不可用");
    }
}
Copier après la connexion

Exemple danalyse de code Java @SentinelResource

Configuration graphique et relation code

Exemple danalyse de code Java @SentinelResource

signifie que le nombre de requêtes en 1 seconde est supérieur à 1, donc on va dans notre flux personnalisé, limiter le flux

Test 1

Cliquez 1 en 1 seconde Ensuite, OK

J'ai dépassé ce qui précède, j'ai cliqué comme un fou et j'ai renvoyé les informations de traitement de limitation de courant auto-définies. Une limitation de courant s'est produite

Exemple danalyse de code Java @SentinelResource

Selon la limitation de courant de l'adresse URL et le traitement ultérieur

Grâce à l'accès. URL pour limiter le courant, Sentinel sera renvoyé Livré avec des informations de traitement de limitation de courant par défaut

Contrôleur modifié en :

@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"));
    }
}
Copier après la connexion

Test 2

Visitez une fois

http://localhost:8401/rateLimit/byUrl

Normal

Exemple danalyse de code Java @SentinelResource

Cliquez comme un fou http://localhost:8401/rateLimit/byUrl

Exemple danalyse de code Java @SentinelResource

renverra les résultats de traitement des limites actuelles de Sentinel

Problèmes rencontrés par la solution ci-dessus

1 La valeur par défaut du système ne reflète pas notre propre activité exigences.

2 Selon les conditions existantes, notre méthode de traitement personnalisée est couplée au code des affaires, ce qui n'est pas intuitif.

3 Si une couverture est ajoutée à chaque méthode commerciale, la surcharge du code augmentera.

4 La méthode de traitement unifiée globale n'est pas reflétée.

Logique de traitement de limitation de courant définie par le client

Créez la classe CustomerBlockHandler pour personnaliser la logique de traitement de limitation de courant

Après les tests, nous l'avons personnalisée

Ajoutez de nouvelles activités à la classe de contrôle

  @GetMapping("/rateLimit/customerBlockHandler")
    @SentinelResource(value = "customerBlockHandler",
            blockHandlerClass = CustomerBlockHandler.class, blockHandler = "handleException2")
    public CommonResult customerBlockHandler()
    {
        return new CommonResult(200,"按客户自定义限流处理逻辑");
    }
Copier après la connexion

Logique de traitement de limitation de courant générale personnalisée

blockHandlerClass = CustomerBlockHandler.class

blockHandler = handleException2

La configuration ci-dessus : recherchez la méthode handleException2 dans la classe CustomerBlockHandler pour le traitement de sauvegarde et définissez la logique générale de traitement de limitation de courant

Test 3

Exemple danalyse de code Java @SentinelResource

Exemple danalyse de code Java @SentinelResource

Test Enfin nous l'avons personnalisé

Exemple danalyse de code Java @SentinelResource

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal