Seata 核心类分析 #630
Unanswered
luky116
asked this question in
Technology sharing
Seata 核心类分析
#630
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
ResourceManager:资源管理器
ResourceManager(RM,资源管理器)主要负责分布式事务生命周期的所有活动,比如:
每一种模式都会定义一个自己的RM,比如上面的就是TCC模式的RM,它继承了AbstractResourceManager抽象类,这个抽象类里面定义了通用的 事务分支注册、事务状态报告、资源注册等逻辑,每种事务模式要自定义分支提交和回滚的逻辑。这里利用了模板设计模式。
在Seata中,RM是通过SPI的机制来加载的。
RMHandler:RM对外统一的操作入口
每种事务方式都对应一个RMHandler类,通过装饰器模式,里面封装了一个ResourceManager类,RMHandler的所有操作实际上是调用了ResourceManager类的逻辑来完成的。
�这样做的好处是,通过SPI机制加载ResourceManager,自动化了RMHandler的配置流程,用户使用的时候,只需要通过SPI配置好RM即可使用。
注意,AbstractRMHandler 类的下面两个方法,是调用ResourceManager类实现的
�
DefaultResourceManager
DefaultResourceManager 是单例模式,他里面根据BranchType来动态选择RM执行器,然后执行RM的实际逻辑来执行。这里使用了装饰器模式。
registerResource 方法会进入到这里执行,这里的话就直接调用了Netty的逻辑,来向TC发送请求了:
registerResource 继续往下走,会走到这里的逻辑:
管理TC侧的链接信息
sendRegisterMessage 里面调用了
io.seata.core.rpc.netty.AbstractNettyRemotingClient
类里面的 sendAsyncRequest 方法NettyRemotingClient-TM侧发送/处理消息的核心类
�
AbstractNettyRemoting 类的processMessage是处理消息的入口方法:
NettyRemotingServer:TC侧处理消息逻辑
RemotingProcessor-消息处理器逻辑
为了方便看,截图大图放这里:
注册中心-RegistryService
以下是目前支持的所有注册中心方式:
管理TC侧的连接-ClientChannelManager
管理Session - SessionManager
TC侧消息处理类:
�
Beta Was this translation helpful? Give feedback.
All reactions