seata源码分析之-资源管理器详解1
资源管理器RM
前面将的大致的AT
流程,但是一些细节的东西没讲,现在来说下比较重要的资源管理器,比如我们的AT,TCC,XA,SAGA
模式下资源管理器具体是什么时候创建的,创建的是什么,又是怎么运作的。
RMClient初始化资源管理器加载
前面有说过RM
会在GlobalTransactionScanner
初始化开始的时候初始化:
单例的静态初始化懒加载模式:
最终就是创建了DefaultResourceManager
:
看到这里,大致能猜出来,其实就是他做了代理,他内部有很多实现ResourceManager
接口的管理器:
看起来好像是从哪里加载进来这些类的:
然后我们跟进去看看:
好像是从上面文件下加载进来的类,猜猜应该有点像Springboot
的自动配置那种加载类名吧。
根据目录和类型查找了文件,这个类型就是我们前面传的ResourceManager.class
:
然后看下META-INF/services/io.seata.core.model.ResourceManager
,果然有4
个ResourceManager
的实现类:
后面的代码就是读取每一行,然后去掉注释,根据全限定类名来进行加载,就是一种SPI
机制:
最后我们就看到有4
个资源管理器被实例化了:
AT模式的DataSourceManager
这个就是我们前面讲过的:
XA模式的ResourceManagerXA
TCC模式的TCCResourceManager
SAGA模式的SagaResourceManager
大致介绍了下这些资源管理器是什么时候加载进来的,具体怎么用的后面会说,因为还要结合DefaultRMHandler
处理器。
今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。