当前位置: 首页 > article >正文

Java微服务商城高并发秒杀项目--013.SentinelResource的使用

在shop-order-server模块中新建AnnoController:

@RestController
@Slf4j
public class AnnoController {
    @RequestMapping("/anno1")
    @SentinelResource(value = "anno1",
            blockHandler="anno1BlockHandler",
            fallback = "anno1Fallback"
    )
    public String anno1(String name){
        if("wolfcode".equals(name)){
            throw new RuntimeException();
        }
        return "anno1";
    }
    public String anno1BlockHandler(String name, BlockException ex){
        log.error("{}", ex);
        return "接⼝被限流或者降级了";
    }
    //Throwable时进⼊的⽅法
    public String anno1Fallback(String name,Throwable throwable) {
        log.error("{}", throwable);
        return "接⼝发⽣异常了";
    }
}

启动服务后,查看sentinel中的服务:

设置服务流控规则,并检验流控的响应方式,发现没有走全局的响应:

附加@SentinelResource的常用参数:

属性

作用

value

资源名称,必需项(不能为空)

entryType

entry 类型,可选项(默认为 EntryType.OUT

blockHandler / blockHandlerClass

blockHandler 对应处理 BlockException 的函数名称,可选项。blockHandler 函数访问范围需要是public ,返回类型需要与原⽅法相匹配,参数类型需要和原⽅法相匹配并且最后加⼀个额外的参数,类型为BlockException 。blockHandler 函数默认需要和原⽅法在同⼀个类中。若希望使⽤其他类的函数,则可以指定blockHandlerClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则⽆法解析。

fallback / fallbackClass

fallback 函数名称,可选项,⽤于在抛出异常的时候提供fallback 处理逻辑。fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore ⾥⾯排除掉的异常类型)进⾏处理。fallback 函数签名和位置要求:

1. 返回值类型必须与原函数返回值类型⼀致;

2.⽅法参数列表需要和原函数⼀致,或者可以额外多⼀个Throwable 类型的参数⽤于接收对应的异常。

3.fallback 函数默认需要和原⽅法在同⼀个类中。若希望使⽤其他类的函数,则可以指定 fallbackClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则⽆法解析。

defaultFallback

默认的 fallback 函数名称,可选项,通常⽤于通⽤的fallback 逻辑(即可以⽤于很多服务或⽅法)。默认fallback 函数可以针对所有类型的异常(除了

exceptionsToIgnore ⾥⾯排除掉的异常类型)进⾏处理。若同时配置了 fallback 和 defaultFallback,则只有fallback 会⽣效。defaultFallback 函数签名要求:

1. 返回值类型必须与原函数返回值类型⼀致;

2. ⽅法参数列表需要为空,或者可以额外多⼀个Throwable 类型的参数⽤于接收对应的异常。

3. defaultFallback 函数默认需要和原⽅法在同⼀个类中。若希望使⽤其他类的函数,则可以指定 fallbackClass为对应的类的 Class 对象,注意对应的函数必需为 static函数,否则⽆法解析。

exceptionsToIgnore

⽤于指定哪些异常被排除掉,不会计⼊异常统计中,也不会进⼊ fallback 逻辑中,⽽是会原样抛出。


http://www.kler.cn/a/16589.html

相关文章:

  • matlab建模入门指导
  • 解决 Redis 报错:`(error) NOAUTH Authentication required`
  • 【日志】392.判断子序列
  • GitLab基于Drone搭建持续集成(CI/CD)
  • 【go从零单排】Random Numbers、Number Parsing
  • 【Qt】Macbook M1下载安装
  • 算法刷题|392.判断子序列、115.不同的子序列
  • 大型医院影像PACS系统三维重建技术(获取数据、预处理、配准、重建和可视化)
  • Stable Diffusion 本地部署教程不完全指南
  • 第18章 项目风险管理
  • javascript中的严格模式
  • 自动驾驶行业观察之2023上海车展-----车企发展趋势(1)
  • Python基础合集 练习19(类与对象3(多态))
  • Chapter4:频率响应法(上)
  • Linux套接字编程-2
  • Packet Tracer - 静态路由故障排除
  • 如何学习python?
  • 【C++】右值引用完美转发
  • 什么是 Docker?它能用来做什么?
  • ChatGPT常见问题及其解决方法汇总
  • 微软正式宣布 Win10 死刑,Win11 LTSC要来了
  • 使用 ESP32 设计智能手表 – 第 1 部分制作表盘
  • Shell编程之循环语句
  • osg操控器之动画路径操控器osgGA::AnimationPathManipulator分析
  • 代码随想录算法训练营第四十五天|70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数
  • MySQL基本操作