[seata]A服务插表,然后发送mq,B服务消费,如果B服务有错误,这种场景能用seata保证一致性吗

2024-02-21 298 views
7

A服务插表,然后发送mq,B服务消费,如果B服务有错误,这种场景能用seata保证一致性吗

回答

6

不行,因为二阶段协议必须要有决议的阶段,而纯异步化走mq后是不知道什么时候是个头,所以也就不知道什么时候决议,所以Seata在2.0会做的是将发送消息纳入分布式事务管控,消费侧目前是处理不了的,如果有好的方案可以一起聊聊.

2

不是一回事,tcc异步是二阶段异步,mq是一阶段就异步,无法决议

8

没问题,按业务划分,部分业务用seata,部分用mq,mq我可以把整个事务放到异步中执行,再通过前端短轮询查看下单结果即可,可以比如a调bc两个服务,为了吞吐量可以把a改为发mq消息,在a的consumer消费方法中执行调bc,把全局事务异步化处理+短轮询状态回查

3

我直播业务就这么干的,先丢mq,在慢慢消费

1

你也是把整个事务都放到mq执行?失败回滚,重新入队吗

8

必须的,超过失败次数告警丢死信 人工去恢复,短轮询没搞,太麻烦了,基本上很少出问题,反而增大数据库压力,特别是小伙伴乱来的情况下,数据库容易崩