1.2 RMClient 启动流程分析

244 阅读1分钟

(1.1 TMClient 启动流程分析) 已经描述了 TMClient的启动流程,通过继承图和代码我们可以知道,TM的引导程序,两个定时任务,两个执行器都是同时创建的,这里不再叙述。

我们重点看差异操作。

我们进入 RMClient的init方法,可以看到他比TM的创建流程多了两步, 设置ResourceManager(资源管理器)ClientMessageListener(消息监听)

1.ResourceManager资源管理器

我们进入 DefaultResourceManager.get() 方法, 可以看到这也是个经典的单例, 使用内部类实现的。

他的创建方法 调用了initResourceManagers()方法,主要是加载当前的资源管理器,主要用了类似 SPI 的机制,进行灵活加载。他会扫描/META-INF.services 下的类进行加载。我们看一下ResourceManager的继承结构。

我们可以看到,ResourceManager 主要实现了分支事务的提交,注册,报告,回滚,以及锁定查询(全局锁)等操作, 关于这些操作后续我们会有专门的文章解析。这里不再过多叙述

2.ClientMessageListener消息监听

ClientMessageListener进去看了一下,这一块可能是同一个人写的, 单例的实现方式相同,加载类的方式相同

我们还是去看 ClientMessageListener 的继承关系

看到这我们就大致能够明白了, ClientMessageListener 负责接收Server 下达的命令, 进行分支事务的提交,回滚,以及删除undoLog 的请求。