grep -n 'waitDurationInOpenState' config/application.yml curl -s localhost:8081/actuator/health | jq '.components.circuitBreakers'
库存服务熔断后一直返回兜底数据,日志里熔断状态从 OPEN 到 HALF_OPEN 一次都没出现。翻配置发现 waitDurationInOpenState 写的是 600 秒,事故处理了 25 分钟,这个值一直没人动过。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,熔断器把等待时间当成进入半开的唯一条件,600 秒内不会放任何探测请求。参数是照官方示例抄的,示例场景是低频调用,和每秒 3000 次的接口不是一个量级。
这次卡住的地方就在「熔断不恢复」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。
处理上按这个顺序:把 waitDuration 收到 10 到 30 秒 让探测能快速发生;半开状态允许 5 到 10 个请求通过 单个探测失败不至于再等一轮;加一条熔断状态变化的日志和指标 确认 HALF_OPEN 真的出现过;上线前用压测把依赖打挂 手动观察一次完整恢复过程。
改完只确认一件事:依赖恢复后 30 秒内能看到 HALF_OPEN 再回到 CLOSED,接口不再返回兜底数据。
