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

本文详细探讨RocketMQ的事务消息使用,包括Half消息、事务状态回查,通过实战案例分析了half消息后置、中置、前置的优缺点,指出half消息中置存在的问题和rocketmq-client的bug,并强调关注half消息发送结果的重要性,推荐使用half消息前置以保证最终一致性。
摘要由CSDN通过智能技术生成

开心一刻

  昨晚和一哥们一起吃夜宵,点了几瓶啤酒

  不一会天空下起了小雨,哥们突然道:糟了

  我:怎么了

  哥们:外面下雨了,我老婆还在等着我去接她

  他给了自己一巴掌,说道:真他妈不是个东西

  我心想:哥们真是个好丈夫

  很快他补充道:喝酒怎么能分心呢

  我一口啤酒直接笑喷而出

知识回顾

  本文不讲什么是 RocketMQ ,不讲它的实现原理,只想和大家探讨下它的事务消息的正确使用方式

  再探讨之前,先带大家回顾下知识点

  事务消息的设计原理

   RocketMQ 在 4.3.0 版中已经支持分布式事务消息,采用 2PC 的思想实现事务消息提交,同时增加一个补偿逻辑来处理二阶段超时或者失败的消息,如下图所示

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

  什么,英文看不懂?贴心的我早已想到,中文版的也有

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

  其中有两个点:半事务、回查事务状态,值得我们重点回顾

  Half 消息

  何谓 half 消息?

  消息发送方把消息发送到 MQ 服务,但是此消息的状态被标记为不能投递,处于这种状态下的消息称为 half 消息;消费方不能消费 half 消息

  发送方对 half 消息二次确认后,也就是 Commit 之后,消费方才可以消费到;如果是 Rollback,该消息则会被删除,永远不会被消费到

  事务状态回查

  如果在 RocketMQ 事务消息的二阶段过程中失败了,例如在做 Commit 操作时(上图中的第 4 步),出现网络问题导致 Commit 失败,那么需要通过一定的策略使这条消息最终被 Commit

  RocketMQ 采用了一种补偿机制,称为“回查”。Broker 端对未确定状态的消息发起回查,将消息发送到对应的 Producer 端(同一个 Group 的 Producer),由 Producer 根据消息来检查本地事务的状态,进而执行 Commit 或者 Rollback

  值得注意的是,RocketMQ 并不会无休止的的信息事务状态回查,默认回查 15 次,如果 15 次回查还是无法得知事务状态,RocketMQ 默认回滚该消息

  更多细节请查看:事务消息

实战示例

  理论知识理解之后,就需要我们进行实操与分析了

  需求背景

  假设我们有两个服务:订单服务、积分服务,当用户成功下单之后,需要给用户加相应的积分

  实现方式有很多种,你知道哪些?

  假设我们用 RocketMQ 事务消息来保证最终一致

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值