一、业务背景与痛点
Taocarts反向海淘业务存在大量非实时核心链路:订单创建后的库存统计、批次归集、运费核算、日志归档、用户消息推送、对账数据生成等。早期采用同步执行模式,所有逻辑串行执行,导致两大严重问题。
第一,接口响应极慢,单次下单接口耗时高达800ms~1.5s,高峰期超时严重;第二,大促流量洪峰瞬间压垮数据库,同步大批量写入引发锁等待、慢查询堆积,极易造成服务雪崩。跨境业务潮汐流量明显,同步架构完全无法承载波峰冲击。
二、问题分析
1、核心下单逻辑与非核心统计、归档、推送逻辑耦合,同步阻塞;
2、瞬时高并发写入无缓冲,流量直接打穿至数据库;
3、任务失败无重试机制,导致数据统计遗漏、对账缺失。
三、解决方案
引入阿里云RocketMQ,将所有非实时业务异步解耦,实现流量削峰、异步重试、业务解耦,核心链路只保留下单、库存锁定核心逻辑,极大缩短接口耗时。
四、核心落地代码
/**
订单核心链路:只保留核心逻辑,异步任务投递MQ
*/
@Service
public class OrderCreateService {@Autowired
private RocketMQTemplate rocketMQTemplate;public Result createOrder(OrderDTO dto) {
// 1.核心事务:创建订单、锁定库存(仅核心逻辑) OrderDO order = buildOrder(dto); orderMapper.insert(order); stockLockService.lockStock(dto.getGoodsId()); // 2.非核心任务全部异步投递MQ解耦 OrderAsyncMessage message = new OrderAsyncMessage(); message.setOrderNo(order.getOrderNo()); message.setUserId(dto.getUserId()); rocketMQTemplate.syncSend("taocarts-order-async-topic", JSON.toJSONString(message)); return Result.success(order.getOrderNo());}
}
消费者异步处理+失败重试
/**MQ消费者:异步处理统计、对账、推送、归档
*/
@RocketMQMessageListener(topic = "taocarts-order-async-topic", consumerGroup = "taocarts-order-consumer")
@Component
public class OrderAsyncConsumer implements RocketMQListener {@Override
public void onMessage(String message) {OrderAsyncMessage msg = JSON.parseObject(message, OrderAsyncMessage.class); try { // 批次归集 batchService.collectBatch(msg.getOrderNo()); // 费用核算 feeService.calcOrderFee(msg.getOrderNo()); // 消息推送 pushService.sendUserNotice(msg.getUserId()); // 日志归档 logService.archiveOrderLog(msg.getOrderNo()); }catch (Exception e){ // MQ自动重试,保证数据最终一致性 throw new RuntimeException("异步任务处理失败,等待重试"); }}
}
五、优化效果
1、下单接口平均耗时从1s降至120ms以内;
2、高峰期数据库瞬时QPS压降60%,彻底杜绝流量打穿问题;
3、异步任务失败自动重试,数据最终一致性100%保障;
4、业务完全解耦,迭代维护成本大幅降低。
六、总结
潮汐流量明显的跨境业务,异步解耦是架构稳定的刚需。阿里云RocketMQ完美实现削峰填谷、解耦容错,是中高并发跨境系统的必备中间件架构。