Try Everything Different In My Life.

「🔨实践」使用RocketMQ实现分布式事务

2020.07.05

分布式系统中,消息队列是必不可不少的中间件,实现服务之间的异步调用,分布式系统中存在分布式事务的问题,使用RocketMQ可以实现分布式事务

RocketMQ的事务消息

简单来说,就是生产者给MQ发送一个半消息(暂时不可被消费),消息发送成功后执行本地的事务,根据本地的事务将事务是提交还是回滚告诉MQ,收到commit的话消费消息,Rollback就丢弃消息。

如果生产者长时间没有告诉MQ本地事务的状态,那么MQ就会重新询问生产者本地事务的状态,然后根据状态来确定最终消息是commit还是丢弃

半消息

暂时不会被消费的消息

消息回查

当长时间未收到本地事务执行的结果的时候,MQ会重新询问生产者本地事务执行的结果

代码实现

业务内容为:修改订单的状态,成功后相应的减少库存。A服务为修改订单的状态,B服务为修改商品的库存。他们存在在两个业务系统中,中间依靠消息队列来进行消息通信