天天看點

SkyWalking 源碼分析 —— Collector Jetty Server Manager1. 概述2. JettyManagerModule3. JettyManagerProvider4. JettyManagerService

1. 概述

本文主要分享 Collector Jetty Server Manager。Collector 通過該管理器,管理啟動的多個 Jetty Server,例如 Agent Jetty Server、Naming Jetty Server、UI Jetty Server。

SkyWalking 源碼分析 —— Collector Jetty Server Manager1. 概述2. JettyManagerModule3. JettyManagerProvider4. JettyManagerService
友情提示:建議胖友已經讀過 《SkyWalking 源碼分析 —— Collector Server Component 伺服器元件》

Jetty Server Manager 在 SkyWalking 架構圖處于如下位置( 紅框 ) :

FROM https://github.com/apache/incubating-skywalking
SkyWalking 源碼分析 —— Collector Jetty Server Manager1. 概述2. JettyManagerModule3. JettyManagerProvider4. JettyManagerService

下面我們來看看整體的項目結構,如下圖所示 :

SkyWalking 源碼分析 —— Collector Jetty Server Manager1. 概述2. JettyManagerModule3. JettyManagerProvider4. JettyManagerService

😈 代碼量非常少,考慮到這是個單獨的項目,是以單獨成文。

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

 為唯一。

繼續閱讀