获取xid的全流程
使用的客户端为seata-samples/springboot-mybatis
Business
1.BusinessController#purchaseCommit 入口
2.BusinessService#purchase
GlobalTransactional注解拦截,进入下一步
3.GlobalTransactionalInterceptor#handleGlobalTransaction
4.TransactionalTemplate#execute
5.TransactionalTemplate#beginTransaction
6.DefaultGlobalTransaction#begin
7.DefaultTransactionManager#begin 客户端同步请求服务端获取xid,下一步进入服务端。
发送同步Begin请求到TC
下面看看TC服务端是怎么处理的
TC
8.AbstractRpcRemoting#channelRead
读取Business传过来的Begin消息
9.ServerHandler#dispatch
10.DefaultServerMessageListenerImpl#onTrxMessage
11.DefaultCoordinator#onRequest
12.GlobalBeginRequest#handle
13.AbstractTCInboundHandler#handle
14.DefaultCoordinator#doGlobalBegin
生成response,设置xid
15.GlobalSession 生成xid的规则,tarnId是16位数的随机数。xid示例 127.0.0.1:8091:8253121365987328
服务端时序图