// 事务消息
@Transactional
public void createOrder(OrderRequest request) {
Order order = orderMapper.insert(request);
// 事务消息:本地事务成功才发送
TransactionMQProducer producer = new TransactionMQProducer();
producer.sendMessageInTransaction(
new Message("order-topic", JSON.toJSONBytes(order)),
new LocalTransactionExecuter() {
@Override
public LocalTransactionState executeLocalTransactionBranch(Message msg, Object arg) {
// 执行业务逻辑
return LocalTransactionState.COMMIT_MESSAGE;
}
}
);
}
五、架构模式
5.1 事件溯源(Event Sourcing)
csharp复制代码
// 不存储状态,只存储事件
@Entity
public class OrderAggregate {
private String orderId;
private List<OrderEvent> events = new ArrayList<>();
public void apply(OrderCreatedEvent event) {
events.add(event);
// 重放所有事件得到当前状态
}
}
5.2 CQRS
less复制代码
// 读写分离
@Service
public class OrderQueryService {
// 读:从 Elasticsearch/Redis 查询
}
@Service
public class OrderCommandService {
// 写:生成事件,写入 Event Store
}