rocketmq事务消息的理解
来源:互联网 发布:商务数据分析与应用 编辑:程序博客网 时间:2024/06/05 11:48
http://www.cnblogs.com/wxd0108/p/6038543.html
RocketMQ第一阶段发送Prepared消息
时,会拿到消息的地址,第二阶段执行本地事物,第三阶段通过第一阶段拿到的地址去访问消息,并修改状态。细心的你可能又发现问题了,如果确认消息发送失败了怎么办?RocketMQ会定期扫描消息集群中的事物消息,这时候发现了Prepared消息
,它会向消息发送者确认,Bob的钱到底是减了还是没减呢?如果减了是回滚还是继续发送确认消息呢?RocketMQ会根据发送端设置的策略来决定是回滚还是继续发送确认消息。这样就保证了消息发送与本地事务同时成功或同时失败。
如果endTransaction
方法执行失败,导致数据没有发送到broker
,broker
会有回查线程定时(默认1分钟)扫描每个存储事务状态的表格文件,如果是已经提交或者回滚的消息直接跳过,如果是prepared状态
则会向Producer
发起CheckTransaction
请求,Producer
会调用DefaultMQProducerImpl.checkTransactionState()
方法来处理broker
的定时回调请求,而checkTransactionState
会调用我们的事务设置的决断方法,最后调用endTransactionOneway
让broker
来更新消息的最终状态。
再回到转账的例子,如果Bob的账户的余额已经减少,且消息已经发送成功,Smith端开始消费这条消息,这个时候就会出现消费失败和消费超时两个问题?解决超时问题的思路就是一直重试,直到消费端消费消息成功,整个过程中有可能会出现消息重复的问题,按照前面的思路解决即可。
本质上还是个二阶段提交重复消费幂等性要自己做
问题
要是本地事务提交,然后挂了,然后确认消息没发送,然后又没法回查确认,导致分布式事务的失败?
- rocketmq事务消息的理解
- RocketMQ源码解析:事务消息
- RocketMQ存储篇——事务消息相关的文件
- RocketMQ源码解析-事务消息的二阶段提交
- 分布式消息队列RocketMQ--事务消息--解决分布式事务的最佳实践
- 分布式消息队列RocketMQ--事务消息--解决分布式事务的最佳实践
- 分布式消息队列RocketMQ--事务消息--解决分布式事务的最佳实践
- 分布式消息队列RocketMQ--事务消息--解决分布式事务的最佳实践
- 分布式消息队列RocketMQ--事务消息--解决分布式事务的最佳实践
- 分布式消息队列RocketMQ--事务消息--解决分布式事务的最佳实践
- 分布式消息队列RocketMQ--事务消息--解决分布式事务的最佳实践
- Rocketmq 消息的解压缩
- RocketMQ的Push消息
- RocketMQ的消息存储
- rocketmq消息的简单示例
- 必知必会的RocketMQ消息类型
- 必知必会的RocketMQ消息类型
- RocketMQ——Producer篇:发送事务消息
- final关键字
- 原创文章测试
- 不可能不爱的 XCODE 9:最新功能详尽介绍
- Centos6.8编译安装keepalived-1.3.5步骤
- 案例演示:图像去雾
- rocketmq事务消息的理解
- 数据结构--线性结构
- loadrunner Web_类函数之web_set_sockets_option()
- 【Angular2】新建Angular2项目
- java输出菱形
- Jenkins中无法启动子进程的解决办法
- 枚举类的二三事
- 强大的Handler详细分析
- oracle 解析XML