使用rocketmq去解决分布式事务
我们项目中使用的是rocketMQ的[可靠消息一致性]来实现分布式事务的,我们在上游服务中保证mq消息一定发送成功,在下游服务中我们保证mq消息一定被消费,然后对mq消息做幂等处理,我们使用redis去做幂等处理,把消息的id作为key,消息的状态作为value,当上游服务回滚后,重新发送mq消息给下游服务时,我们先在redis中查询是该mq消息是否已经被消费,如果被消费就直接返回成功,没有被消费就消费mq消息向下执行.
业务场景:
比如现在有两个微服务a和b,a服务修改数据库后发送mq消息给b服务,
b服务成功消费后a服务继续向下进行,之后a服务出现错误回滚,此时b服务怎么回滚?
解决方案: 在a服务中把mq消息放在最后一行 这样在a服务没有执行完成之前就不会发送mq消息,也不用考虑b服务的回滚问题