1. 概述
本文主要分享 Collector Jetty Server Manager。Collector 通過該管理器,管理啟動的多個 Jetty Server,例如 Agent Jetty Server、Naming Jetty Server、UI Jetty Server。
友情提示:建議胖友已經讀過 《SkyWalking 源碼分析 —— Collector Server Component 伺服器元件》
Jetty Server Manager 在 SkyWalking 架構圖處于如下位置( 紅框 ) :
FROM https://github.com/apache/incubating-skywalking
下面我們來看看整體的項目結構,如下圖所示 :
😈 代碼量非常少,考慮到這是個單獨的項目,是以單獨成文。
2. JettyManagerModule
org.skywalking.apm.collector.jetty.manager.JettyManagerModule
,實作 Module 抽象類,Jetty 管理器 Module 。
#name()
實作方法,傳回子產品名為
"jetty_manager"
。
#services()
實作方法,傳回 Service 類名:JettyManagerService 。
3. JettyManagerProvider
org.skywalking.apm.collector.jetty.manager.JettyManagerProvider
,實作 ModuleProvider 抽象類,Jetty 管理器元件服務提供者。
#name()
實作方法,傳回元件服務提供者名為
"jetty"
。
module()
實作方法,傳回元件類為 JettyManagerModule 。
#requiredModules()
實作方法,傳回依賴元件為空。
#prepare(Properties)
實作方法,執行準備階段邏輯。
- 第 55 行 :建立 JettyManagerServiceImpl 對象,并調用
父類方法,注冊到#registerServiceImplementation(...)
。services
#start()
實作方法,執行啟動階段邏輯。目前是個空方法。
#notifyAfterCompleted()
實作方法,執行啟動完成邏輯。
- 第 63 至 69 行 :周遊注冊的伺服器清單,逐個調用
方法,進行啟動。JettyServer#start()
4. JettyManagerService
org.skywalking.apm.collector.jetty.manager.service.JettyManagerService
,繼承 Service 接口,Jetty 管理器服務接口。
#createIfAbsent(host, port, contextPath)
接口方法,建立 Jetty Server ,若不存在。
#addHandler(host, port, serverHandler)
接口方法,添加 Jetty Server 請求處理器。
4.1 JettyManagerServiceImpl
org.skywalking.apm.collector.jetty.manager.service.JettyManagerServiceImpl
,Jetty 管理器服務實作類。
構造方法 ,使用來自 JettyManagerProvider 的
servers
伺服器數組。這是為什麼 JettyManagerProvider 沒有對
servers
做新增操作,結果裡面有資料的原因。
#createIfAbsent(host, port, contextPath)
實作方法,建立 Jetty Server ,若不存在。判斷方式為
host + port
為唯一。
#addHandler(host, port, serverHandler)
實作方法,添加 Jetty Server 請求處理器。判斷方式為
host + port
為唯一。