微服务架构下分布式事务的治理方法
在微服务架构中,分布式事务处理是核心挑战之一。本文提供一套可复现的治理方案。
核心治理策略
1. Saga模式实现 采用补偿机制实现最终一致性。以订单-库存-支付为例:
@Service
public class OrderService {
@Transactional
public void createOrder(Order order) {
// 1. 创建订单
orderRepository.save(order);
// 2. 扣减库存
try {
inventoryService.reduceStock(order.getProductId(), order.getQuantity());
} catch (Exception e) {
// 回滚订单
rollbackOrder(order.getId());
throw new RuntimeException("库存不足");
}
// 3. 扣减余额
try {
paymentService.deductBalance(order.getUserId(), order.getAmount());
} catch (Exception e) {
// 回滚库存
inventoryService.rollbackStock(order.getProductId(), order.getQuantity());
rollbackOrder(order.getId());
throw new RuntimeException("支付失败");
}
}
}
2. 本地消息表方案 通过数据库本地事务保证消息发送一致性:
public class MessageService {
@Transactional
public void sendOrderMessage(Order order) {
// 1. 保存订单
orderRepository.save(order);
// 2. 插入消息表(本地事务)
Message message = new Message();
message.setBusinessId(order.getId());
message.setStatus("PENDING");
messageRepository.save(message);
// 3. 发送消息到MQ
messageProducer.send(message);
}
}
3. 最终一致性监控 建立定时任务检查异常状态:
@Component
public class TransactionMonitor {
@Scheduled(fixedDelay = 30000)
public void checkPendingMessages() {
List<Message> pendingMessages = messageRepository.findByStatus("PENDING");
for (Message msg : pendingMessages) {
if (isTimeout(msg)) {
// 执行补偿逻辑
handleCompensation(msg);
}
}
}
}
实施建议
- 先从低复杂度场景开始,如订单创建流程
- 建立完善的监控告警机制
- 定期进行事务回滚测试验证

讨论