静默失败(Fail Silent)
静默失败是一种特殊策略:当系统发生故障时,不返回错误信息,而是返回空的或无害的响应。
静默失败的适用场景
静默失败示例
FailSilentExample.java
静默失败 vs 抛出异常
本章总结
核心要点:
- 静默失败适合非核心功能:不影响主业务
- 静默失败不等于什么都不做:至少要记录日志
- 静默失败要提供默认值:返回有意义的降级响应
静默失败是一种特殊策略:当系统发生故障时,不返回错误信息,而是返回空的或无害的响应。
| 场景 | 说明 |
|---|---|
| 非核心功能 | 如页面统计、广告推荐,故障时不影响主流程 |
| 可选增强功能 | 如个性化推荐,故障时返回默认内容 |
| 监控指标 | 指标上报故障不影响主业务 |
@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();
}
}
}| 场景 | 策略 | 原因 |
|---|---|---|
| 核心业务(支付、下单) | 抛出异常 | 必须让用户知道失败了 |
| 非核心业务(统计、推荐) | 静默失败 | 不影响主流程 |
| 异步任务(日志、监控) | 静默失败 | 失败不影响用户 |
核心要点: