rocketmq事务
事务消息
解决的问题:保证本地事务和发送消息同时成功, 保证分布式系统的最终一致性。
其他方案的问题:
1. 先发消息, 再执行本地事务。
问题: 消息发成功之后, 系统宕机,本地事务没有执行成功。
2. 先执行本地事务, 再发消息。
问题: 本地事务执行成功, 系统宕机, 消息没有发送成功。
3. 先执行本地事务, 再发消息。 并放到同一个事务中。
问题: 本地事务发送成功, 发送消息超时。 本地事务回滚。
3.1 消息实际发送失败, 符合预期
3.2 消息实际发送成功,不符合预期。
综上:
1. 使用事务消息 可以有效地解决以上问题 -- 建议1
2. 如果感觉事务消息实现复杂,可以使用2 + 重试 + 离线数据对账 + 补偿 的形式, 保证消息不漏发。