做积极的人,而不是积极废人!
本文主要基于 SkyWalking 3.2.6 正式版
1. 概述
2. JettyManagerModule
3. JettyManagerProvider
4. JettyManagerService
666. 彩蛋
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. JettyManagerModuleorg.skywalking.apm.collector.jetty.manager.JettyManagerModule
,实现 Module 抽象类,Jetty 管理器 Module 。
#name()
实现方法,返回模块名为 "jetty_manager"
。
#services()
实现方法,返回 Service 类名:JettyManagerService 。
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()
方法,进行启动。
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
为唯一。