首页
学习
活动
专区
圈层
工具
发布

RocketMQ系列(七)事务消息(数据库|最终一致性)

当executeLocalTransaction方法返回UNKNOW以后,RocketMQ会每隔一段时间调用一次checkLocalTransaction,这个方法的返回值决定着这个消息的最终归宿。...我们运行一下生产端的代码,看看是什么情况,日志如下: executeLocalTransaction termId=15 term:com.example.rocketmqdemo.entity.Term...@4a3509b0 sendResult:COMMIT_MESSAGE 时间:Wed Jun 17 08:56:49 CST 2020 我们看到,先执行的是executeLocalTransaction...那么为什么在执行executeLocalTransaction方法时,能够查询到termId=16的数据呢?还记得MySQL的事务隔离级别吗?忘了的赶快复习一下吧。...我们可以在executeLocalTransaction方法中,固定返回UNKNOW,数据插入数据库成功也好,失败也罢,我们都返回UNKNOW。

73620

RocketMQ系列(七)事务消息(数据库|最终一致性)

当executeLocalTransaction方法返回UNKNOW以后,RocketMQ会每隔一段时间调用一次checkLocalTransaction,这个方法的返回值决定着这个消息的最终归宿。...我们运行一下生产端的代码,看看是什么情况,日志如下: executeLocalTransaction termId=15 term:com.example.rocketmqdemo.entity.Term...@4a3509b0 sendResult:COMMIT_MESSAGE 时间:Wed Jun 17 08:56:49 CST 2020 我们看到,先执行的是executeLocalTransaction...那么为什么在执行executeLocalTransaction方法时,能够查询到termId=16的数据呢?还记得MySQL的事务隔离级别吗?忘了的赶快复习一下吧。...我们可以在executeLocalTransaction方法中,固定返回UNKNOW,数据插入数据库成功也好,失败也罢,我们都返回UNKNOW。

2.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    关于 RocketMQ 事务消息的正确打开方式 → 你学废了吗

    只有发送 half 消息成功,并且发送状态为 SEND_OK ,才会执行 executeLocalTransaction ,向 t_order_transaction_log 表写入事务日志     那么即使...消息会被回滚,积分服务收不到消息     导致的问题就是:用户下单成功,但却没有增加积分     可见关注 half 消息发送结果的重要性   4、half 消息发送成功,且返回的是 SEND_OK 状态,但 executeLocalTransaction...只有 half 消息发送成功,且返回状态是 SEND_OK 才会执行 executeLocalTransaction     即使 Broker 回查事务状态,得到的结果始终是 UNKNOW ,最终...half 消息会被回滚,积分服务收不到消息     订单服务与积分服务都没有落库成功,也就说是没问题的   3、half 消息发送成功,且返回的状态是 SEND_OK ,但 executeLocalTransaction...订单数据回滚了,积分服务未收到消息,那么此种情况是没问题的   看起来挺顺眼,异常情况下也没什么问题 rocketmq-client 的 bug   需要弄清楚的问题有两个:   1、half 消息中置, executeLocalTransaction

    1.2K20

    RocketMQ(十一):事务消息如何满足分布式一致性?

    等待一定时间未收到状态时会自动回查状态发送事务消息的生产者为TransactionMQProducer,TransactionMQProducer的使用与默认类似,只不过需要设置事务监听器TransactionListener事务监听器接口需要实现executeLocalTransaction...checkLocalTransaction用于broker回查本地事务状态public interface TransactionListener { //执行本地事务 LocalTransactionState executeLocalTransaction...implements TransactionListener { //执行本地事务 其中参数arg传递的为订单ID @Override public LocalTransactionState executeLocalTransaction...通用同步发送消息流程 sendDefaultImpl ****(校验参数、获取路由信息、选择队列、封装消息、netty rpc调用,期间检查超时、超时情况)获取发送消息结果,如果成功使用事务监听器执行本地事务 executeLocalTransaction...API"); //成功执行本地事务 localTransactionState = transactionListener.executeLocalTransaction

    54131
    领券