免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

Seata Server 1.5.2 源碼學習

Seata 包括 Server端和Client端 。Seata中有三種角色:TC、TM、RM,其中,Server端就是TC,TM和RM屬Client端 。Client端的源碼學習上一篇已講過,詳見 《Seata 1.5.2源碼學習》,今天來學習Server端的源碼 。
源碼下載地址:https://github.com/seata/seata
啟動類 ServerApplication 沒什么好說的,重點是ServerRunner

Seata Server 1.5.2 源碼學習

文章插圖
ServerRunner 是一個 CommandLineRunner 實例,因此在Spring Boot啟動完成后會回調(diào)其run()方法 。而在ServerRunner的run()方法中調(diào)用了Server.start()方法 。
Seata Server 1.5.2 源碼學習

文章插圖
在Server#start()方法中,初始化了包括id生成器在內(nèi)的很多組件,我們先不管這些,重點關注以下幾行代碼:
NettyRemotingServer nettyRemotingServer = new NettyRemotingServer(workingThreads);DefaultCoordinator coordinator = DefaultCoordinator.getInstance(nettyRemotingServer);coordinator.init();nettyRemotingServer.setHandler(coordinator);DefaultCoordinator是一個單例Bean,在整個應用中只有一個DefaultCoordinator實例
Seata Server 1.5.2 源碼學習

文章插圖

Seata Server 1.5.2 源碼學習

文章插圖

Seata Server 1.5.2 源碼學習

文章插圖
DefaultCoordinator 實現(xiàn)了 TransactionMessageHandler
NettyRemotingServer#setHandler()設置的正是TransactionMessageHandler
Seata Server 1.5.2 源碼學習

文章插圖
DefaultCoordinator#onRequest()
Seata Server 1.5.2 源碼學習

文章插圖
重點是這三行:
AbstractTransactionRequestToTC transactionRequest = (AbstractTransactionRequestToTC) request;transactionRequest.setTCInboundHandler(this);transactionRequest.handle(context);DefaultCoordinator實現(xiàn)了TCInboundHandler接口,所以它不僅是一個TransactionMessageHandler,還是一個TCInboundHandler
這里transactionRequest.setTCInboundHandler(this),就是指定AbstractTransactionRequestToTC中的TCInboundHandler設置為DefaultCoordinator
Seata Server 1.5.2 源碼學習

文章插圖

Seata Server 1.5.2 源碼學習

文章插圖
AbstractTransactionRequest#handle()
Seata Server 1.5.2 源碼學習

文章插圖
不同的請求分發(fā)給對應的處理器去處理
Seata Server 1.5.2 源碼學習

文章插圖
現(xiàn)在請求和對應的處理器都有了,下面具體看一下每種請求都是如何被處理的
1. 開啟全局事務
Seata Server 1.5.2 源碼學習

文章插圖
開啟事務直接調(diào)用子類DefaultCoordinator#doGlobalBegin(),同時放在一個處理模板中執(zhí)行
Seata Server 1.5.2 源碼學習

文章插圖
在doGlobalBean()中調(diào)用DefaultCore#begin()并返回全局事務ID(xid)
Seata Server 1.5.2 源碼學習

文章插圖
new GlobalSession()
Seata Server 1.5.2 源碼學習

文章插圖
添加一個SessionManager作為Session的監(jiān)聽器
Seata Server 1.5.2 源碼學習

文章插圖
Core
Seata Server 1.5.2 源碼學習

文章插圖
總結一下,開啟事務:
  1. 創(chuàng)建一個GlobalSession

    經(jīng)驗總結擴展閱讀