incubator-seata icon indicating copy to clipboard operation
incubator-seata copied to clipboard

在多个微服务间,如访问同一个数据库表,如何使得事务可见?

Open AndyLue opened this issue 5 years ago • 4 comments

Why you need it?

Is your feature request related to a problem? Please describe in details 在使用seata的过程中,我们发现。在如下业务场景中: 如A,B两个微服务。在处理一个请求时,A服务处理完请求B服务,B服务处理完返回给A服务,A服务反馈给用户。 开始时:如A服务对数据源a中的a1表进行增删改操作后,A调用B的服务,此时在B服务中对数据源a中的a1表查询时,不能查到最新的数据(A处理过后的数据)。

How it could be?

A clear and concise description of what you want to happen. You can explain more about input of the feature, and output of it. 我们想要的效果是:A调用B的服务,此时在B服务中对数据源a中的a1表查询时,可以查到最新的数据(A处理过后的数据)。 是否有这种场景的解决方案????

Other related information

Add any other context or screenshots about the feature request here.

AndyLue avatar Jul 06 '20 04:07 AndyLue

a b服务对a1的查询属于同一个事务,a1最新数据可见

funky-eyes avatar Jul 06 '20 08:07 funky-eyes

这个是什么原理?两个服务通过传递事务ID来保存,数据库在建立连接时,是可见的吗? 我刚才试了一个事例,确实是可以的。但有个问题,我在业务过程中,断点住,用数据库查询工具查询时发现读取到了未提交的数据。我用的MYSQL,查了下隔离级别是REPEATABLE-READ的。 seata这个GlobalTransactional注解,默认事务隔离级别是读未提交吗???这个可以设置吗?

AndyLue avatar Jul 06 '20 09:07 AndyLue

这个是什么原理?两个服务通过传递事务ID来保存,数据库在建立连接时,是可见的吗? 我刚才试了一个事例,确实是可以的。但有个问题,我在业务过程中,断点住,用数据库查询工具查询时发现读取到了未提交的数据。我用的MYSQL,查了下隔离级别是REPEATABLE-READ的。 seata这个GlobalTransactional注解,默认事务隔离级别是读未提交吗???这个可以设置吗?

我说的可见性属于有分布式事务注解的服务中,seata at无法保证你走后门去查看数据的隔离性。你可以尝试切换为xa

funky-eyes avatar Jul 07 '20 10:07 funky-eyes

我试了一下,在AT模式下,可以如@AndyLue所说,在B服务查到a1表最新数据,但是在XA模式下不行。 @a364176773 AT模式和XA模式在这个场景下表现不同吗? seata版本1.5.2,spring-cloud-starter-alibaba-seata版本2021.1

chengda avatar Aug 04 '22 09:08 chengda