在多个微服务间,如访问同一个数据库表,如何使得事务可见?
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.
a b服务对a1的查询属于同一个事务,a1最新数据可见
这个是什么原理?两个服务通过传递事务ID来保存,数据库在建立连接时,是可见的吗? 我刚才试了一个事例,确实是可以的。但有个问题,我在业务过程中,断点住,用数据库查询工具查询时发现读取到了未提交的数据。我用的MYSQL,查了下隔离级别是REPEATABLE-READ的。 seata这个GlobalTransactional注解,默认事务隔离级别是读未提交吗???这个可以设置吗?
这个是什么原理?两个服务通过传递事务ID来保存,数据库在建立连接时,是可见的吗? 我刚才试了一个事例,确实是可以的。但有个问题,我在业务过程中,断点住,用数据库查询工具查询时发现读取到了未提交的数据。我用的MYSQL,查了下隔离级别是REPEATABLE-READ的。 seata这个GlobalTransactional注解,默认事务隔离级别是读未提交吗???这个可以设置吗?
我说的可见性属于有分布式事务注解的服务中,seata at无法保证你走后门去查看数据的隔离性。你可以尝试切换为xa
我试了一下,在AT模式下,可以如@AndyLue所说,在B服务查到a1表最新数据,但是在XA模式下不行。 @a364176773 AT模式和XA模式在这个场景下表现不同吗? seata版本1.5.2,spring-cloud-starter-alibaba-seata版本2021.1