天天看点

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

 为唯一。

继续阅读