知识卡片
预期错误应绕过重试直接降级
内容
不是所有失败响应都该触发同一套重试逻辑。下游服务返回 404(比如查询一本目录里根本没有的书)是业务语义明确的”预期错误”,重试多少次结果都不会变,此时该做的是直接降级返回一个空结果,而不是浪费三次重试的时间和网络开销。响应式流里可以用两个 onErrorResume 各司其职来实现这个分层:一个放在超时之后、重试之前,专门拦截 404 这种明确不该重试的错误直接短路降级;另一个放在重试全部失败之后兜底,捕获真正意外的异常再做一次最终降级。发散:这里的顺序安排本身就是设计决策——操作符在响应式流里的先后位置直接决定了它们的作用范围,”预期错误的降级”必须挡在”重试”前面,否则重试逻辑会把一个语义清晰的正常错误也误当成”暂时故障”去反复尝试,把本该轻量的降级路径活活拖成了昂贵的重试路径。
参考来源
《Cloud Native Spring in Action》第8章《Reactive Spring: Resilience and scalability》