发布时间:2025-06-24 20:45:04  作者:北方职教升学中心  阅读量:708


文章目录

    • 1.熔断降级
        • 1.基本介绍
          • 1.线程堆积引出熔断降级
          • 2.示意图
          • 3.熔断,降级,限流三者之间的关系
        • 2.熔断降级策略(以分钟为基本单位)
          • 1.慢调用比例
          • 2.异常比例
          • 3.异常数
        • 3.熔断降级实例—慢调用比例
          • 1.需求分析
          • 2.com/sun/springcloud/controller/MemberController.java 新增接口t3并休眠300ms
          • 3.具体配置
            • 1.重启10004微服务
            • 2.查看注册情况
            • 3.浏览器输入http://localhost:10004/t3发送请求
            • 4.Sentinel点击降级
            • 5.降级规则配置
          • 4.测试
            • 1.一秒超过五次请求http://localhost:10004/t3会发生熔断降级
            • 2.等待10s,再次请求,虽然还是慢调用,但是小于最小请求数,所以不会发生熔断
        • 5.熔断降级实例—异常比例
          • 1.需求分析
          • 2.com/sun/springcloud/controller/MemberController.java 新增接口t4并出现异常返回error
          • 3.具体配置
            • 1.重启10004微服务
            • 2.查看注册情况
            • 3.浏览器输入http://localhost:10004/t4
            • 4.Sentinel点击降级
            • 5.具体配置
          • 4.测试
            • 1.一秒超过五次请求 http://localhost:10004/t4,发生熔断降级
            • 2.五秒之后再次发送请求,降级解除
        • 6.熔断降级实例—异常数
          • 1.需求分析
          • 2.还是使用掐面的t4接口即可
          • 3.具体配置
          • 4.测试
            • 1.一秒超过五次请求 http://localhost:10004/t4,由于每发生熔断降级
            • 2.五秒之后再次发送请求,降级解除
    • 2.热点限流
        • 1.基本介绍
          • 1.引出热点限流
          • 2.示意图
          • 3.上图解读
        • 2.需求分析
        • 3.具体配置
          • 1.10004微服务的controller增加两个接口
            • 被热点限流的接口
            • 处理热点限流的接口
          • 2.重启10004微服务,并启动Nacos和Sentinel
          • 3.浏览器输入 http://localhost:10004/news?id=1&type=%E5%8A%A8%E7%89%A9
          • 4.Sentinel查看热点接口
          • 5.点击热点,进行基本配置
          • 6.保存后点击热点规则,编辑刚才的规则
          • 7.点击高级选项,对参数的具体值进行额外配置
        • 4.测试
          • 1.浏览器快速访问 http://localhost:10004/news?id=1&type=%E5%8A%A8%E7%89%A9 会出现热点限流
          • 2.快速访问 http://localhost:10004/news?id=2&type=%E5%8A%A8%E7%89%A9 不会出现热点限流
        • 5.注意事项
          • 1.热点参数可以设置多个值进行限流
          • 2.处理热点限流的方法的返回值需要与被处理的方法相同
    • 3.系统规则
        • 1.基本介绍
          • 1.引出系统规则
          • 2.介绍
        • 2.系统规则实例
          • 1.需求分析
          • 2.新增系统规则
          • 3.进行配置
          • 4.测试
            • 浏览器快速访问 http://localhost:10004/t2(或者其他任意的资源) 都会进行热点限流
    • 4.全局限流处理类
        • 1.需求分析
        • 2.具体实现
          • 1.编写全局限流处理类
          • 2.编写一个接口进行测试
          • 3.测试
            • 1.重启10004模块
            • 2.配置system接口的限流,这里就配置一个热点限流
            • 3.浏览器快速访问 http://localhost:10004/system?id=test
    • 5.fallback(统一处理java异常)
        • 1.需求分析
        • 2.具体实现
          • 1.修改system接口,每五次抛出异常
          • 2.编写全局异常处理类
          • 3.system接口使用全局异常处理类处理异常
          • 4.测试
            • 1.打开nacos和sentinel
            • 2.重启10004微服务
            • 3.浏览器访问一下http://localhost:10004/system?id=test
            • 4.Sentinel配置限流,这里就配置一个QPS流量控制
            • 5.目前情况分析
            • 6.访问五次 http://localhost:10004/system?id=test 成功交给全局异常处理类来处理

1.熔断降级

1.基本介绍
1.线程堆积引出熔断降级

image-20240329104355325

2.示意图

image-20240329105626479

3.熔断,降级,限流三者之间的关系

image-20240329105426279

2.熔断降级策略(以分钟为基本单位)
1.慢调用比例
  • 进行熔断的条件是:慢调用的比例达到阈值,QPS大于最小请求数
  • 待超过熔断时长后,如果还是满足熔断条件(慢调用的比例达到阈值,QPS大于最小请求数),则会继续进行熔断

image-20240329110452910

2.异常比例
  • 进行熔断的条件是:异常比例达到阈值,QPS大于最小请求数
  • 待超过熔断时长后,如果还是满足熔断条件(异常比例达到阈值,QPS大于最小请求数),则会继续进行熔断

image-20240329112148590

3.异常数
  • 进行熔断的条件是:异常数达到阈值,QPS大于最小请求数
  • 待超过熔断时长后,如果还是满足熔断条件(异常数达到阈值,QPS大于最小请求数),则会继续进行熔断

image-20240329112510279

3.熔断降级实例—慢调用比例
1.需求分析

image-20240329112705700

2.com/sun/springcloud/controller/MemberController.java 新增接口t3并休眠300ms

image-20240329113359178

3.具体配置
1.重启10004微服务

image-20240329113533774

2.查看注册情况

image-20240329113611668

3.浏览器输入http://localhost:10004/t3发送请求

image-20240329113644817

4.Sentinel点击降级

image-20240329113718423

5.降级规则配置
  • 这样当每秒钟的请求数大于5,并且每分钟只要有一个是慢调用就进行熔断降级

image-20240329114118368

4.测试
1.一秒超过五次请求http://localhost:10004/t3会发生熔断降级

image-20240329114323785

2.等待10s,再次请求,虽然还是慢调用,但是小于最小请求数,所以不会发生熔断

image-20240329115141664

5.熔断降级实例—异常比例
1.需求分析

image-20240329131043620

2.com/sun/springcloud/controller/MemberController.java 新增接口t4并出现异常返回error

image-20240329131230071

3.具体配置
1.重启10004微服务

image-20240329131456261

2.查看注册情况

image-20240329131528454

3.浏览器输入http://localhost:10004/t4

image-20240329131620416

4.Sentinel点击降级

image-20240329131647299

5.具体配置
  • 这样配置表示当每秒钟的请求数达到5,并且**每分钟异常的比例大于20%**则会出现熔断降级

image-20240329131736371

4.测试
1.一秒超过五次请求 http://localhost:10004/t4,发生熔断降级

image-20240329131849384

2.五秒之后再次发送请求,降级解除

image-20240329131959017

6.熔断降级实例—异常数
1.需求分析

image-20240329132810897

2.还是使用掐面的t4接口即可
3.具体配置
  • 这样,当吗,每秒钟的请求数到达5,并且每分钟异常数量大于5,则会进行熔断降级

image-20240329132944371

4.测试
1.一秒超过五次请求 http://localhost:10004/t4,由于每发生熔断降级

image-20240329131849384

2.五秒之后再次发送请求,降级解除

image-20240329131959017

2.热点限流

1.基本介绍
1.引出热点限流

image-20240329134028382

2.示意图

image-20240329134542514

3.上图解读

image-20240329134610173

2.需求分析

image-20240329134928822

3.具体配置
1.10004微服务的controller增加两个接口
被热点限流的接口
  • 使用@SentinelResource注解来制定被热点限流的接口以及处理热点限流的接口
/**     * 测试热点限流     * @param id     * @param type     * @return     */@GetMapping("/news")@SentinelResource(value ="news",blockHandler ="hot")// value为资源名可以任意指定,blockHandler为限流处理publicStringnews(@RequestParam("id")Stringid,@RequestParam("type")Stringtype){return"id="+id +" type="+type;}
处理热点限流的接口
  • 接受的参数需要与被热点限流的接口的参数一致,并且有一个处理异常的参数
/**     * 热点限流处理     * @param id 与news方法的参数一致     * @param type 与news方法的参数一致     * @param blockException 限流处理的异常     * @return 注意:这里的返回值类型要与news方法的返回值类型一致     */publicStringhot(Stringid,Stringtype,BlockExceptionblockException){return"id"+id +"type"+type +"热点限流处理";}
2.重启10004微服务,并启动Nacos和Sentinel
3.浏览器输入 http://localhost:10004/news?id=1&type=%E5%8A%A8%E7%89%A9

image-20240329144442569

4.Sentinel查看热点接口

image-20240329144621993

5.点击热点,进行基本配置
  • 这个配置表示对参数id进行热点限流,只要每秒请求次数超过2就触发限流

image-20240329144934949

6.保存后点击热点规则,编辑刚才的规则

image-20240329145007319

7.点击高级选项,对参数的具体值进行额外配置

image-20240329151348982

4.测试
1.浏览器快速访问 http://localhost:10004/news?id=1&type=%E5%8A%A8%E7%89%A9 会出现热点限流
  • 原因是对参数id设置了热点限流的触发条件为每秒请求数为2

image-20240329151437389

2.快速访问 http://localhost:10004/news?id=2&type=%E5%8A%A8%E7%89%A9 不会出现热点限流
  • 原因是对参数id=2设置了热点限流的触发条件为每秒请求数为100

5.注意事项
1.热点参数可以设置多个值进行限流

image-20240329151708068

2.处理热点限流的方法的返回值需要与被处理的方法相同

3.系统规则

1.基本介绍
1.引出系统规则

image-20240329152555753

2.介绍
  • 简单来说这个系统规则就是对整个系统的所有资源进行统一管理,共享一套限流规则

image-20240329153222053

2.系统规则实例
1.需求分析

image-20240329153902556

2.新增系统规则

image-20240329154220628

3.进行配置
  • 这样配置就表示,整个系统的每秒请求数超过2就会进行限流

image-20240329154301245

4.测试
浏览器快速访问 http://localhost:10004/t2(或者其他任意的资源) 都会进行热点限流

image-20240329154704800

4.全局限流处理类

1.需求分析

image-20240329154954350

2.具体实现
1.编写全局限流处理类
  • 需要注意:方法必须是static,并且参数类型和返回的类型必须与被处理的方法一致
packagecom.sun.springcloud.handler;importcom.alibaba.csp.sentinel.slots.block.BlockException;/** * Description: 全局限流处理器,方法必须是static * * @Author sun * @Create 2024/3/29 16:04 * @Version 1.0 */publicclassGlobalBlockHandler{/**     * 全局限流处理器     *     * @param id 传入的参数     * @param e  异常     * @return 返回的结果,必须与被处理的方法返回值一致     */publicstaticStringblockHandler(Stringid,BlockExceptione){return"GlobalBlockHandler "+id +" 服务不可用";}}
2.编写一个接口进行测试
/**     * 全局限流测试     * @return     */@GetMapping("/system")//  @SentinelResource 注解中的value值为资源名 名字任意,blockHandlerClass为全局限流处理类,blockHandler为处理方法@SentinelResource(value ="system",blockHandlerClass =GlobalBlockHandler.class,blockHandler ="blockHandler")publicStringsystem(@RequestParam(value ="id",required =false)Stringid){return"id"+id +"全局限流未激活";}
3.测试
1.重启10004模块

image-20240329161430407

2.配置system接口的限流,这里就配置一个热点限流

image-20240329161744272

3.浏览器快速访问 http://localhost:10004/system?id=test

image-20240329161901203

5.fallback(统一处理java异常)

1.需求分析

image-20240329162600010

2.具体实现
1.修改system接口,每五次抛出异常
privateintcount =0;/**     * 全局限流测试     * @return     */@GetMapping("/system")//  @SentinelResource 注解中的value值为资源名 名字任意,blockHandlerClass为全局限流处理类,blockHandler为处理方法@SentinelResource(value ="system",blockHandlerClass =GlobalBlockHandler.class,blockHandler ="blockHandler",fallbackClass =GlobalFallbackHandler.class,fallback ="fallbackHandlerMethod1")publicStringsystem(@RequestParam(value ="id",required =false)Stringid){// 每调用5次就抛出异常if(++count %5==0){thrownewRuntimeException("出现异常!!!");}return"id"+id +"全局限流未激活";}
2.编写全局异常处理类
  • 方法需要是static
  • 参数类型和返回类型与被处理的方法类型一致
packagecom.sun.springcloud.handler;/** * Description: 全局异常处理类,所有的方法都要是静态方法,参数类型和返回值类型也要与被处理的方法返回值相同 * * @Author sun * @Create 2024/3/29 16:33 * @Version 1.0 */publicclassGlobalFallbackHandler{publicstaticStringfallbackHandlerMethod1(Stringid,Throwablethrowable){return"fallback处理异常!"+"id:"+id;}}
3.system接口使用全局异常处理类处理异常
  • 新增两个属性,一个是全局异常处理类的Class对象,一个是处理异常的方法

image-20240329163824828

4.测试
1.打开nacos和sentinel
2.重启10004微服务
3.浏览器访问一下http://localhost:10004/system?id=test
4.Sentinel配置限流,这里就配置一个QPS流量控制

image-20240329164403683

5.目前情况分析
  • 正常情况:每秒请求数不超过2
  • 限流情况:每秒请求数超过2,被全局限流处理类中的方法处理
  • 异常情况:每5次抛出一次异常,交给全局异常处理器处理
6.访问五次 http://localhost:10004/system?id=test 成功交给全局异常处理类来处理

image-20240329170349994