赞
踩
在本地事务执行完成后会向MQServer发送Commit或Rollback操作,此时如果在发送消息的时候生产者出故障了,那么要保证这条消息最终被消费,MQServer会像服务端发送回查请求,确认本地事务的执行状态。
当然了rocketmq并不会无休止的的信息事务状态回查,默认回查15次,如果15次回查还是无法得知事务状态,RocketMQ默认回滚该消息。
事务消息有三种状态:
TransactionStatus.CommitTransaction:提交事务消息,消费者可以消费此消息
TransactionStatus.RollbackTransaction: 回滚事务,它代表该消息将被删除,不允许被消费。
TransactionStatus.Unknown :中间状态,它代表需要检查消息队列来确定状态。
业务需求:用户请求订单微服务 order-service
接口删除订单(退货),删除订单时需要调用 account-service
的方法给账户增加余额,一个典型的分布式事务问题。
在开始代码之前首先需要搭建好的RocketMQ环境,如果有不会的可以参考下面这篇文章:
http://javadaily.cn/articles/2020/04/07/1586248405351.html 非常详细
org.apache.rocketmq
rocketmq-spring-boot-starter
rocketmq:
name-server: xxx.xx.x.xx:9876
producer:
group: cloud-group
Order-Service作为分布式事务开始的入口,在Service层我们给RocketMQ发送一条半消息
/**
根据订单号删除订单
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。