一、异常处理机制的重要性
在生鲜电商系统中,异常处理机制是保障系统稳定运行、提升用户体验的关键环节。对于美菜这样的生鲜B2B平台,异常处理需要特别关注:
1. 生鲜商品特性:时效性强、易损耗、品质波动大
2. 供应链复杂性:多级供应商、冷链物流、仓储管理
3. 业务连续性要求:餐饮客户对配送时效的严格要求
二、核心异常场景与处理策略
1. 供应链环节异常
场景:
- 供应商缺货或延迟供货
- 冷链运输温度异常
- 仓储库存数据不一致
处理机制:
```python
class SupplyChainException(Exception):
"""供应链基础异常类"""
pass
class SupplierDelayException(SupplyChainException):
"""供应商延迟异常"""
def __init__(self, supplier_id, expected_time, actual_time):
self.supplier_id = supplier_id
self.delay_minutes = (actual_time - expected_time).total_seconds() / 60
super().__init__(f"供应商{supplier_id}延迟{self.delay_minutes}分钟")
处理示例
def process_order(order):
try:
supplier_response = call_supplier_api(order.items)
if supplier_response.status == "DELAYED":
raise SupplierDelayException(
order.supplier_id,
order.expected_time,
supplier_response.actual_time
)
正常处理流程...
except SupplierDelayException as e:
触发备用供应商机制
alternate_supplier = find_alternate_supplier(order.items)
if alternate_supplier:
re_route_order(order, alternate_supplier)
log_exception(e, severity="WARNING")
else:
notify_customer(order, "商品缺货", "HIGH")
log_exception(e, severity="CRITICAL")
```
2. 订单履约异常
场景:
- 客户下单后取消
- 配送地址无法到达
- 商品质量问题投诉
处理机制:
```java
// 订单状态机中的异常处理
public class OrderStateMachine {
public void processOrder(Order order) {
try {
switch (order.getStatus()) {
case PENDING:
validateInventory(order);
order.setStatus(CONFIRMED);
break;
case CONFIRMED:
if (customerCancels(order)) {
throw new OrderCancelledException("客户主动取消");
}
scheduleDelivery(order);
break;
// ...其他状态处理
}
} catch (OrderCancelledException e) {
handleOrderCancellation(order, e);
} catch (InventoryShortageException e) {
handleInventoryShortage(order, e);
} catch (DeliveryException e) {
handleDeliveryFailure(order, e);
}
}
private void handleDeliveryFailure(Order order, DeliveryException e) {
// 1. 尝试重新调度配送
// 2. 如果失败,通知客户并提供补偿方案
// 3. 记录异常原因供分析
}
}
```
3. 支付系统异常
场景:
- 支付网关超时
- 账户余额不足
- 第三方支付系统故障
处理机制:
```javascript
// 支付处理流程中的异常处理
async function processPayment(orderId, paymentMethod) {
try {
const paymentResult = await paymentGateway.charge({
orderId,
amount: calculateOrderTotal(orderId),
method: paymentMethod
});
if (paymentResult.status === FAILED) {
throw new PaymentFailedError(paymentResult.errorCode);
}
updateOrderStatus(orderId, PAID);
} catch (error) {
if (error instanceof PaymentGatewayTimeout) {
// 重试机制
retryPayment(orderId, paymentMethod, 3); // 最多重试3次
} else if (error instanceof InsufficientFundsError) {
notifyCustomerInsufficientFunds(orderId);
} else {
// 记录未知支付错误
logPaymentError(orderId, error);
notifyOpsTeam(error);
}
}
}
```
三、异常处理最佳实践
1. 分层异常处理架构
```
应用层
│
├── 业务异常(自定义异常)
│ ├── 供应链异常
│ ├── 订单异常
│ └── 支付异常
│
└── 系统异常
├── 数据库异常
├── 网络异常
└── 第三方服务异常
```
2. 异常处理原则
1. 明确异常分类:区分业务异常和系统异常
2. 适当恢复策略:根据异常类型选择重试、回滚或补偿
3. 详细日志记录:包含上下文信息便于问题定位
4. 用户友好提示:避免暴露技术细节
5. 监控告警机制:对关键异常实时告警
3. 补偿机制设计
对于生鲜系统,关键补偿机制包括:
1. 供应商切换:主供应商异常时自动切换备用供应商
2. 库存预占释放:订单失败时及时释放预占库存
3. 配送资源重分配:配送异常时重新分配运力
4. 客户补偿方案:根据异常严重程度提供优惠券等补偿
四、监控与持续优化
1. 异常仪表盘:实时展示各类异常发生频率和趋势
2. 根因分析系统:自动关联异常与系统变更
3. A/B测试框架:验证异常处理策略的有效性
4. 熔断机制:对频繁异常的第三方服务自动降级
五、技术实现建议
1. 使用Spring的@ExceptionHandler(Java)或类似框架功能统一处理异常
2. 实现全局异常拦截器(如Axios拦截器处理前端异常)
3. 采用Sentry等工具进行错误追踪和聚合
4. 设计异常代码体系:如`SC-1001`表示供应商异常
通过完善的异常处理机制,美菜生鲜系统可以显著提升系统稳定性,减少业务中断风险,同时优化客户体验,在激烈的市场竞争中保持优势。