sentinel限流 FlowException null等问题

2,020 阅读1分钟

限流

问题一、限流次数达到,没有进入降级方法,抛出系统异常,FlowException null

最先定位com.alibaba.csp.sentinel.annotation.aspectj.SentinelResourceAspect这个切面,抛出异常一层套一层,自己重新实现了这个切面,进行遍历抛出,最大包裹50层

然而并没有什么用!!!!

进入方法,查看获取method失败

继续走,发现这里的m不为空,有一个ispresent的属性为false
这里sentinel对所有降解的方法在第一次实现之后,会存入一个map进行缓存,我们这里找到这个key值不为空,说明第一次解析方法的时候没找到对应的讲解方法,我们重起应用,看第一次put到map出现什么问题
原来在这里判断是否是降级方法这里,判断了名称,是否为静态类(只有sentinel注解显式说明blockHandlerClass才会用到),返回参数,请求参数长度!!!!!这是最坑的,这个入参长度sentinel竟然包含降级的exception(捕获的flowException还是blockException随个人心情,基类都是block的),加上,ok了

问题二、sentinel服务降级但是500内部错误

对应的方法,对应的类都没有错,这里的反射报错了,抛出InvocationTargetException,这个异常眼不眼熟!!我们在降级的方法里有抛出新的异常而没有进行上层的捕获,所以sentinel降级方法进行反射时候报错