• com.alibaba.csp.sentinel.slots.block.flow.FlowException: null--记录一次报错


    阿丹:

            记录一次开发中遇到的错误。

    报错信息描述:

    1. 2023-10-01 09:47:57.263 ERROR 39572 --- [nio-9100-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.reflect.UndeclaredThrowableException] with root cause
    2. com.alibaba.csp.sentinel.slots.block.flow.FlowException: null

    问题出现场景:

            因为我是开发后端嘛,使用Sentinel的注解来给我的接口做了一下限流,限流的效果是正常的,但是发现我的回调函数并不能正常被触发。

    问题出现原因:

    根据错误信息来看,这是一个com.alibaba.csp.sentinel.slots.block.flow.FlowException异常。该异常通常由流控规则引起,表示请求被阻塞或限流了。

    要解决这个问题,你可以考虑以下几个方面:

    1. 检查流控规则:检查Sentinel的流控规则是否正确配置并能够满足你的需求。确保规则没有过于严格的限制导致请求被拒绝。

    2. 检查资源使用情况:查看应用程序的资源使用情况,特别是在流控发生时。如果资源使用过高,可以考虑优化代码或增加资源容量来避免流控。

    3. 检查Sentinel配置:确保Sentinel的相关配置正确无误。例如,检查Sentinel的配置文件是否正确加载,规则是否生效等。

    解决方式:

    1、回调函数的参数要与被限流的参数保持一致,并且接口的后面添加一个参数。

    2、要保证限流的回调函数的返回值与被限流的接口保持一致

    正确的代码

    1. @SentinelResource(value = "findByUsername" ,blockHandler = "blockHandlerForGetUser")
    2. @GetMapping("/findByUsername/{username}")
    3. public User findByUsername(@PathVariable String username){
    4. return service.findByUsername(username);
    5. }
    6. public User blockHandlerForGetUser(@PathVariable String username, BlockException blockException){
    7. User user = new User();
    8. user.setUsername("限流统一返回类");
    9. return user;
    10. }
  • 相关阅读:
    动态内存管理
    163_技巧_Power BI 一键批量建立自定义字段参数
    【Demo】游戏小地图
    Spring OAuth2 Resource Server 配置
    C - Check The Text(string)
    「Python条件结构」实现超市付款功能
    移动端开发之混合开发模式优劣势综述
    BGP笔记3
    PCIe协议中的电源管理概述
    深度学习:基于长短时记忆网络LSTM实现情感分析
  • 原文地址:https://blog.csdn.net/weixin_72186894/article/details/133457623