Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

嵌套调用的情下出现问题,如A-->B-->C #9

Open
ansonli2017 opened this issue Feb 8, 2018 · 4 comments
Open

嵌套调用的情下出现问题,如A-->B-->C #9

ansonli2017 opened this issue Feb 8, 2018 · 4 comments

Comments

@ansonli2017
Copy link

ansonli2017 commented Feb 8, 2018

我测试了一下嵌套调用的情况,想问一下,为啥同一个事务活动中,却会创建两个事务组呢:
default

这里模拟的是 consumer调用order,order再调用stock。在这个嵌套调用中,是一次完整的事务活动,不应该属于同一个事务组吗?
如果同一次事务活动中创建了两个或以上的事务组的话,那么当出现了有的事务组成功,有的事务组失败的情况下,最终的这次事务活动是成功还是失败?事务管理器如何进行回滚?

@lijianandwujie
Copy link

我今天也测试了你这种情况A-B-C,发现C成为了发起者而不是参与者,是因为在远程调用时事务组的id没有传递到C,导致C成为了发起者,没有传递的原因经过查看代码觉得是RestTemplateInterceptor在设置header时和执行远程调用不在同一个线程导致的。经过测试,在参与者handler中执行proceed方法之前将txGroupId设置到TxTransactionLocal中就可以解决了,希望作者能够确认是不是这个问题

@ansonli2017
Copy link
Author

@lijianandwujie 请问具体怎么修改,能粘贴上具体修改的代码或步骤吗?

@kissMeet
Copy link

我认为目前的框架不支持a-b-c的事务,仅支持a-b a-c的事务。若需要改造成支持a-b-c事务,我的简单想法是在事务参与者ActorTxTransactionHandler中将txGroupId放到TxTransactionLocal里,完成txGroupId由b到c的传递。

@yu199195
Copy link
Member

嵌套调用关键在与事务组id的传递问题

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants