链路追踪 SkyWalking 源码分析 —— Collector Jetty Server Manager
点击上方“芋道源码”,选择“设为星标”
做积极的人,而不是积极废人!
源码精品专栏
摘要: 原创出处 http://www.iocoder.cn/SkyWalking/collector-jetty-server-module/ 「芋道源码」欢迎转载,保留摘要,谢谢!
因为微信文章无法外链,所以文章很多方法无法点击,跳转到对应的代码。
本文主要基于 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. 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
为唯一。
欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:
已在知识星球更新源码解析如下:
如果你喜欢这篇文章,喜欢,转发。
生活很美好,明天见(。・ω・。)ノ♡