静默失败(Fail Silent)

静默失败是一种特殊策略:当系统发生故障时,不返回错误信息,而是返回空的或无害的响应。

静默失败的适用场景

场景说明
非核心功能如页面统计、广告推荐,故障时不影响主流程
可选增强功能如个性化推荐,故障时返回默认内容
监控指标指标上报故障不影响主业务

静默失败示例

FailSilentExample.java
@Service
public class AnalyticsService {

    public void trackEvent(String event) {
        try {
            analyticsClient.report(event);
        } catch (Exception e) {
            // 静默失败:只记录日志,不抛异常
            log.debug("Analytics report failed: {}", e.getMessage());
        }
    }
}

@Service
public class RecommendationService {

    public List<Product> getRecommendations(Long userId) {
        try {
            return recommendationClient.get(userId);
        } catch (Exception e) {
            // 静默失败:返回热门商品
            log.debug("Recommendation failed, returning hot products: {}", e.getMessage());
            return getHotProducts();
        }
    }
}

静默失败 vs 抛出异常

场景策略原因
核心业务(支付、下单)抛出异常必须让用户知道失败了
非核心业务(统计、推荐)静默失败不影响主流程
异步任务(日志、监控)静默失败失败不影响用户

本章总结

核心要点

  1. 静默失败适合非核心功能:不影响主业务
  2. 静默失败不等于什么都不做:至少要记录日志
  3. 静默失败要提供默认值:返回有意义的降级响应