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
Uh oh!
There was an error while loading. Please reload this page.
-
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