注册分为TM注册到TC,RM注册到TC。这里我们主要看Account的RM是怎么注册到TC的,其他的情况类似。
使用的客户端为seata-samples/springboot-mybatis,版本1.2
启动SpringbootMybatisAccountApplication
在Server端查看日志,可以看出注册成功了。
客户端
1.RmRpcClient#registerResource
判断channels缓存是否为空,如果为空说明之前没有注册过,就调用reconnect
2.NettyClientChannelManager#reconnect
从application.yml配置文件读取服务端的地址信息,赋值给availList。
3.NettyClientChannelManager#acquireChannel
加锁操作
4.NettyClientChannelManager#doConnect
从nettyClientKeyPool获取Channel对象,然后放进channels缓存中
5.GenericKeyedObjectPool#borrowObject
6.NettyPoolableFactory#makeObject
异步发送注册消息到服务端,成功就调用onRegisterMsgSuccess,失败就调用onRegisterMsgFail
7.RmRpcClient#onRegisterMsgSuccess
注册成功
8.NettyClientChannelManager#registerChannel
本地缓存Channel对象
服务端
9.AbstractRpcRemoting#channelRead
接收客户端的注册消息
10.ServerHandler#dispatch
如果消息是注册消息,就调用onRegRmMessage
11.DefaultServerMessageListenerImpl#onRegRmMessage
12.ChannelManager#registerRMChannel
13.RpcContext#holdInResourceManagerChannels
缓存客户端信息