事务组可以是Netty写的一个服务,单调用@LbTransactional的时候可以判断是否是isStart、isEnd,来判断是开始事务,还是结束事务。
原理图
1.定义TxConnection 实现 Connnection接口,其他都一样,唯独commit的时候,需要新建一个线程将其阻塞,等全局事务通知后才能真正调用commit,如果有一方调用rollback,那么这些阻塞的线程也统一调用rollback方法
2.自定义注解TxTransational,并且用aop的方式切入
思路总结:
标志@TbTransation的方法,执行完成后就会调用TxConnection的commit方法,但是这个方法不会立即提交,而是开启一个线程阻塞等待事务管理者的通知,当事务管理者发起全部commit或者rollback的时候再执行。
事务管理者者会记录 事务groupId,当前的事务id,数据库的id,当一方调用rollback或者最后一个调用commit的时候,就会触发commit或者rollback