• 【微服务~Sentinel】Sentinel之dashboard控制面板


    🔎这里是【微服务~Sentinel】,关注我学习微服务不迷路
    👍如果对你有帮助,给博主一个免费的点赞以示鼓励
    欢迎各位🔎点赞👍评论收藏⭐️

    👀专栏介绍

    【微服务~Sentinel】 目前主要更新微服务,一起学习一起进步。

    👀本期介绍

    本期主要介绍Sentinel之dashboard控制面板

    文章目录

    dashboard控制面板

    概述

    配置dashboard

    设置资源点(埋点)

    限流

    编写测试类

    限流方法

    限流操作

    熔断降级

    降级方法

    测试

    降级操作

    限流和降级的区别

    dashboard控制面板

    概述

    Sentinel Dashboard 是一个独立的项目,sentinel-dashboard-1.8.4.jar,需要使用 java -jar 运行

    java -jar -Dserver.port=18080 sentinel-dashboard-1.8.4.jar

    下载地址

    Releases · alibaba/Sentinel · GitHub

    配置dashboard

    添加坐标(已有)

    1. <dependency>
    2. <groupId>com.alibaba.cloudgroupId>
    3. <artifactId>spring-cloud-starter-alibaba-sentinelartifactId>
    4. dependency>

    配置yml

    1. #server.port=8071
    2. #spring.application.name=service-consumer
    3. #spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
    4. #spring.cloud.sentinel.transport.dashboard=192.168.152.153:8080
    5. #端口号
    6. server:
    7. port: 8071
    8. spring:
    9. application:
    10. name: service-consumer #服务名
    11. cloud:
    12. nacos:
    13. discovery:
    14. server-addr: 127.0.0.1:8848 #nacos服务地址
    15. sentinel:
    16. transport:
    17. dashboard: 127.0.0.1:18080
    18. feign:
    19. sentinel:
    20. enabled: true

    测试

    • 先访问资源 http://localhost:8071/feign/echo/123

    • dashboard 登录

    查看控制面板 http://localhost:18080/

    设置资源点(埋点)

    通过 @SentinelResource 注解,设置监控点(定义控制资源、配置控制策略)

    1. package com.czxy.nacos.controller;
    2. import com.alibaba.csp.sentinel.annotation.SentinelResource;
    3. import com.czxy.nacos.feign.TestFeign;
    4. import org.springframework.web.bind.annotation.PathVariable;
    5. import org.springframework.web.bind.annotation.RequestMapping;
    6. import org.springframework.web.bind.annotation.RequestMethod;
    7. import org.springframework.web.bind.annotation.RestController;
    8. import javax.annotation.Resource;
    9. @RestController
    10. @RequestMapping("/feign")
    11. public class TestFeignController {
    12. @Resource
    13. private TestFeign testMyFeign;
    14. @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
    15. @SentinelResource("/feign/echo")
    16. public String echo(@PathVariable String str) {
    17. return testMyFeign.echo(str);
    18. }
    19. }

    测试

    限流

    编写测试类

    1. package com.czxy.controller;
    2. import org.springframework.web.bind.annotation.GetMapping;
    3. import org.springframework.web.bind.annotation.RequestMapping;
    4. import org.springframework.web.bind.annotation.RestController;
    5. @RestController
    6. @RequestMapping("/user")
    7. public class UserController {
    8. @GetMapping("/login")
    9. public String login(String str) {
    10. return "登录成功" + str;
    11. }
    12. @GetMapping("/register")
    13. public String register(String str) {
    14. return "注册成功";
    15. }
    16. }

    限流方法

    • 通过@SentinelResource注解的blockHandler属性制定限流的处理函数

    1. package com.czxy.nacos.controller;
    2. import com.alibaba.csp.sentinel.annotation.SentinelResource;
    3. import com.alibaba.csp.sentinel.slots.block.BlockException;
    4. import org.springframework.web.bind.annotation.GetMapping;
    5. import org.springframework.web.bind.annotation.PostMapping;
    6. import org.springframework.web.bind.annotation.RequestMapping;
    7. import org.springframework.web.bind.annotation.RestController;
    8. @RestController
    9. @RequestMapping("/user")
    10. public class UserController {
    11. @GetMapping("/login")
    12. // 限流设置
    13. @SentinelResource(value="login", blockHandler = "loginBlockHandler")
    14. public String login(String str) {
    15. return "登录成功" + str;
    16. }
    17. public String loginBlockHandler(String str , BlockException e) {
    18. return str + ": 请稍后重试";
    19. }
    20. @GetMapping("/register")
    21. public String register(String str) {
    22. return "注册成功";
    23. }
    24. }

    限流操作

    连续快速2次访问测试功能

    熔断降级

    降级方法

    • 使用@SentinelResource注解的fallback属性来指定降级的方法名

    1. package com.czxy.controller;
    2. import com.alibaba.csp.sentinel.annotation.SentinelResource;
    3. import com.alibaba.csp.sentinel.slots.block.BlockException;
    4. import org.apache.commons.lang.math.RandomUtils;
    5. import org.springframework.web.bind.annotation.GetMapping;
    6. import org.springframework.web.bind.annotation.RequestMapping;
    7. import org.springframework.web.bind.annotation.RestController;
    8. @RestController
    9. @RequestMapping("/user")
    10. public class UserController {
    11. @GetMapping("/login")
    12. // 限流设置
    13. @SentinelResource(value="login", blockHandler = "loginBlockHandler")
    14. public String login(String str) {
    15. return "登录成功" + str;
    16. }
    17. public String loginBlockHandler(String str , BlockException e) {
    18. return str + ": 请稍后重试";
    19. }
    20. @GetMapping("/register")
    21. // 熔断降级
    22. @SentinelResource(value="register", fallback = "registerFallback")
    23. public String register(String str) {
    24. int r = RandomUtils.nextInt(10);
    25. if(r < 5) {
    26. int i = 1 / 0;
    27. }
    28. return "注册成功";
    29. }
    30. public String registerFallback(String str) {
    31. return str + ": 熔断降级";
    32. }
    33. }

    测试

    成功

    熔断降级

    降级操作

    • 慢调用比例:

      • RT:平均响应时间

      • 比例阈值:

      • 熔断时长:

      • 最小请求数:

    • 异常比例:每秒异常总数占通过量的比值超过阈值(DegradeRule 中的 count)之后,资源进入降级状态

    • 异常数:当资源近 1 分钟的异常数目超过阈值之后会进行熔断

    限流和降级的区别

    • 限流是通过设置QPS(每秒查询率)/线程数,将超过阈值部分拒绝处理;

    • 服务降级是监控请求响应时间、响应异常比例、异常数量;超过限定阈值,将进行服务降级熔断,一定时间内不可用;

  • 相关阅读:
    【SQLServer】并行的保留线程和已使用线程
    【赠书活动】如何提高C++代码的性能
    vue中列表实现漏出即曝光
    前端树形Tree数据结构使用-‍♂️各种姿势总结
    当你的公司突然开始大量的裁员,被留下的你,真的准备好面对以后了吗?
    除法求值00
    cloudera server与agent失连问题
    javaH5女娲宫旅游网站设计与实现计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
    如何使用SpringBoot处理全局异常
    ArcGIS如何快速对齐两个图层
  • 原文地址:https://blog.csdn.net/weixin_45481821/article/details/125358034