事务概念
- 事务:逻辑上的一组操作,要么全部执行,要么全部不执行,以保证数据的一致性。
事务的四大特性(ACID)
- 原子性(Atomicity):事务中的所有操作要么全部成功,要么全部失败。
- 一致性(Consistency):事务执行前后,数据库必须保持一致状态。
- 隔离性(Isolation):并发事务之间互不影响,中间状态不可见。
- 持久性(Durability):一旦事务提交,结果永久保存,系统崩溃也不会丢失。
本地事务与分布式事务
- 本地事务:单体应用中,操作涉及同一数据库内多张表的事务。
- 分布式事务:微服务架构中,操作可能涉及多个服务和数据库。
事务消息
- 定义:一种高级消息类型,支持分布式场景下消息生产与本地事务的最终一致性。
- RocketMQ事务消息:支持二阶段提交,与本地事务绑定,实现全局一致性。
RocketMQ事务消息实现原理
- 2PC(两阶段提交):
- 第一阶段:Producer发送预处理消息至Broker,此时消息未投递,Consumer不能消费。
- 第二阶段:
- 如果本地事务成功,Producer发送提交事务消息,Broker投递消息给Consumer。
- 如果本地事务失败,Producer发送回滚事务消息,Broker不投递消息。
回查事务消息流程
- 如果Broker未收到二次确认,将向Producer发起回查,确认是提交还是回滚。
实战示例:PmHub分布式事务处理
- 通过Seata处理添加任务的分布式事务逻辑。
- 核心代码使用
@GlobalTransactional
注解,支持AT模式。
如何发送事务消息
- 定义事务消息Producer:设置事务监听器,包含执行本地事务和回查本地事务状态的方法。
- 修改TaskService类:实现添加任务的本地事务逻辑和事务状态回查逻辑。
注意事项
- 超时机制:半事务消息超时默认4小时,超时未确认则默认回滚。
总结
- RocketMQ事务消息是实现分布式事务的高性能解决方案,基于2阶段提交原理。
- 强调理解原理的重要性,鼓励讨论和学习。