curl -s 'http://127.0.0.1:8719/getRules?type=degrade'
# resource 名要和 @SentinelResource 里的完全一致

给下游配了异常比例熔断阈值 0.5,对方已经连续报错两分钟,控制台里规则状态始终是关闭的,请求还在一个劲往里打。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,Feign 把下游 5xx 包成自定义异常,ErrorDecoder 又把它转成业务异常,Sentinel 统计异常比例时根本没算到这些,抛出去的比例一直是 0,熔断条件自然凑不齐。

「Sentinel 熔断不生效」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

处理上按这个顺序:先确认规则统计的异常类型和实际抛出来的那个一致;在 ErrorDecoder 里把下游的 5xx 重新抛出成框架能统计的异常类型;规则里补上慢调用比例,别只盯着异常数量这一项。

改完只确认一件事:下游持续报错时规则状态变为 OPEN,后续请求走 fallback 不再打过去,也不会再拖慢上游。

作者 9823189