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>
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 服务不可用"); } }
Configuration graphique et relation code
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
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")); } }
Test 2
Visitez une fois
http://localhost:8401/rateLimit/byUrl
Normal
Cliquez comme un fou http://localhost:8401/rateLimit/byUrl
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.
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,"按客户自定义限流处理逻辑"); }
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
Test Enfin nous l'avons personnalisé
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!