本文主要基於 SkyWalking 3.2.6 正式版
- 1. 概述
- 2. GRPCManagerModule
- 3. GRPCManagerProvider
- 4. GRPCManagerService
1. 概述
本文主要分享 Collector gRPC Server Manager。Collector 透過該管理器,管理啟動的多個 gRPC Server,例如 Agent gRPC Server、Remote gRPC Server 。
友情提示:建議胖友已經讀過 《SkyWalking 原始碼分析 —— Collector Server Component 伺服器元件》
另外,本文和 《SkyWalking 原始碼分析 —— Collector Jetty Server Manager》 相似度 99%
gRPC Server Manager 在 SkyWalking 架構圖處於如下位置( 紅框 ) :
FROM https://github.com/apache/incubating-skywalking
下麵我們來看看整體的專案結構,如下圖所示 :
? 程式碼量非常少,考慮到這是個單獨的專案,所以單獨成文。
2. GRPCManagerModule
org.skywalking.apm.collector.grpc.manager.GRPCManagerModule
,實現 Module 抽象類,gRPC Server 管理器 Module 。
#name()
實現方法,傳回模組名為 "gRPC_manager"
。
#services()
實現方法,傳回 Service 類名:GRPCManagerService 。
3. GRPCManagerProvider
org.skywalking.apm.collector.grpc.manager.GRPCManagerProvider
,實現 ModuleProvider抽象類,gRPC Server 管理器元件服務提供者。
#name()
實現方法,傳回元件服務提供者名為 "gRPC"
。
module()
實現方法,傳回元件類為 GRPCManagerModule 。
#requiredModules()
實現方法,傳回依賴元件為空。
#prepare(Properties)
實現方法,執行準備階段邏輯。
- 第 55 行 :建立 GRPCManagerServiceImpl 物件,並呼叫
#registerServiceImplementation(…)
父類方法,註冊到services
。
#start()
實現方法,執行啟動階段邏輯。目前是個空方法。
#notifyAfterCompleted()
實現方法,執行啟動完成邏輯。
- 第 63 至 69 行 :遍歷註冊的伺服器串列,逐個呼叫
GRPCServer#start()
方法,進行啟動。
4. GRPCManagerService
org.skywalking.apm.collector.grpc.manager.service.GRPCManagerService
,繼承 Service介面,gRPC Server 管理器服務介面。
#createIfAbsent(host, port)
介面方法,建立 gRPC Server ,若不存在。
怎麼沒有類似 JettyManagerService 的 #addHandler(...)
方法?目前是呼叫方直接呼叫 #createIfAbsent(host, port)
方法,獲得 gRPC Server 後,後呼叫 Server#addHandler(ServerHandler)
方法。例如:
- `AgentModuleGRPCProvider#start(Properties)`
- `RemoteModuleGRPCProvider#start(Properties)`
4.1 GRPCManagerServiceImpl
org.skywalking.apm.collector.grpc.manager.service.GRPCManagerServiceImpl
,gRPC Server 管理器服務實現類。
構造方法 ,使用來自 GRPCManagerProvider 的 servers
伺服器陣列。這是為什麼 GRPCManagerProvider 沒有對 servers
做新增操作,結果裡面有資料的原因。
#createIfAbsent(host, port)
實現方法,建立 gRPC Server ,若不存在。判斷方式為 host + port
為唯一。
朋友會在“發現-看一看”看到你“在看”的內容