链路追踪 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 为唯一。

本文分享自微信公众号 - 芋道源码(javayuanma)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Clive的技术分享

搭建CI使用Laravel ORM模块

13460
来自专栏Jerry的SAP技术分享

SAP CRM Fiori应用My Note的OData调用设计

版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.bl...

9520
来自专栏Jerry的SAP技术分享

在WebIDE里导入SAP Fiori应用

我补充另外一种在Web IDE中便于修改本地reuse library的方法,同样可以随便修改reuse library 源码而不影响productive co...

10340
来自专栏悠扬前奏的博客

Guava-1.16类Joiner

一个用分隔符合并文本片段的类,也可以合并数组,迭代,变量,甚至map。 可以将结果添加到一个Appendable类或者直接返回String。 如果没有指定s...

9750
来自专栏Jerry的SAP技术分享

S/4HANA生产订单的标准状态和透明工厂原型状态的映射

版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.bl...

9530
来自专栏Jerry的SAP技术分享

什么是SAP GUI的client

版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.bl...

9420
来自专栏Jerry的SAP技术分享

SAP ABAP里数据库表的Storage Parameters从哪里来的

版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.blog....

8320
来自专栏Jerry的SAP技术分享

给nodejs应用的package.json添加Redis服务的依赖

我之前有个nodejs应用,部署到SAP云平台上之后没法正常运行,我通过SAP云平台的Logs功能查看运行日志:

14040
来自专栏Jerry的SAP技术分享

在Visual Studio Code里进行Java开发

Visual Studio Code这款开发神器怎么可能不支持我大Java的开发呢。在extension里下载Java extension Pack for V...

43240
来自专栏weixuqin 的专栏

redis 学习(3)-- String 类型

当我们通过 id 查找相关信息,redis 做中间层,当数据缓存在 redis 中时,我们直接返回该数据,如果 redis 中不存在,就到 MYSQL 中查...

12340

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励