-
Notifications
You must be signed in to change notification settings - Fork 663
design
shuaiqiyu edited this page Sep 1, 2017
·
1 revision
首先用户发起request请求进入consume端(也可以是controller层),controller层进入AOP切面,开启分布式事务
- 会与txManager通信,创建事务组
- 发起业务方法调用point.proceed(),这一步是分布式事务调用RPC方法的入口,会一个一个调用RPC方法
- 主线程调用provder1 提供的RPC方法,同样会进入切面,此时,会启动另一个线程去调用该RPC方法,当前线程wait
调用失败,调用业务方法线程,会唤醒等待的主线程,并把异常信息返回,走的就是one fial rollback这条线,消费方获取异常信息,自动回滚当前事务,分布式事务结束。
调用成功 业务线程,将唤醒主线程,并返回数据。业务线程同txManager 通信 将自己加入到当前事务组中,业务线程进入等待,等待txManager指令,commit or rollback 即 图中的4,5,6
- 主线程继续调用provider2提供的RPC方法 ,同样会进入AOP切面,当前主线程等待,启动一个业务线程去调用业务方法
调用失败,调用业务方法线程,会唤醒等待的主线程,并把异常信息返回,走的就是two fial rollback这条线,消费方获取异常信息,自动回滚当前事务,并与txManager进行通信(two TransactionGroup fail 这条线),txManager
发起rollback指令(two fail rollback 这条线),通知provider1 rollback
调用成功 业务线程,将唤醒主线程,并返回数据。业务线程同txManager 通信 将自己加入到当前事务组中,业务线程进入等待,等待txManager指令,commit or rollback 即 图中的9,10,11
- 主线程point.proceed()方法成功执行,会向txManager发出commit请求,txManager接收请求后,会检查各模块的网络通信等状态,符合条件后,发出commit指令,即 14。通知各个模块提交自己的事务。