摘要: 原创出处 http://www.iocoder.cn/SkyWalking/collector-server-component/「芋道源码」欢迎转载,保留摘要,谢谢!

本文主要基于 SkyWalking 3.2.6 正式版

  • 1. 概述
  • 2. 接口
    • 2.1 Server
    • 2.2 ServerHandler
  • 3. gRPC 实现
    • 3.1 GRPCServer
    • 3.2 GRPCHandler
  • 4. Jetty 实现
    • 4.1 JettyServer
    • 4.2 JettyHandler
  • 666. 彩蛋

  • 《Netty 实现原理与源码解析 —— 精品合集》
  • 《Spring 实现原理与源码解析 —— 精品合集》
  • 《MyBatis 实现原理与源码解析 —— 精品合集》
  • 《Spring MVC 实现原理与源码解析 —— 精品合集》
  • 《Spring Boot 实现原理与源码解析 —— 精品合集》
  • 《数据库实体设计合集》
  • 《Java 面试题 —— 精品合集》
  • 《Java 学习指南 —— 精品合集》

1. 概述

本文主要分享 SkyWalking Collector Server Component 服务器组件。Collector 通过服务器,提供 API 接口给调用方,例如 Agent 、WebUI 。

Server Component 在 SkyWalking 架构图处于如下位置( 红框 ) :

FROM https://github.com/apache/incubating-skywalking

下面我们来看看整体的项目结构,如下图所示 :

OK,我们从接口到实现的顺序进行分享。

2. 接口

2.1 Server

org.skywalking.apm.collector.server.Server ,服务器接口。其实现子类,如下类图 :

#hostPort() 接口方法,获得服务器地址。 #serverClassify() 接口方法,获得服务器分类。

#initialize() 接口方法,初始化服务器。#start() 接口方法,启动服务器。

#addHandler() 接口方法,添加请求处理器( ServerHandler )

2.2 ServerHandler

org.skywalking.apm.collector.server.ServerHandler ,服务器处理器接口。其实现子类,如下类图 :

ServerHandler 无任何接口方法。

一个 ServerHandler 对应一个请求的处理。

3. gRPC 实现

3.1 GRPCServer

org.skywalking.apm.collector.server.grpc.GRPCServer ,基于 gRPC 的服务器实现。

#hostPort() 实现方法,获得服务器地址。 #serverClassify() 实现方法,获得服务器分类为 "Google-RPC"

#initialize() 实现方法,调用 io.grpc.netty.NettyServerBuilder#forAddress(address) 方法,NettyServerBuilder 。此处,服务器并未创建与启动。 #start() 实现方法,创建 io.grpc.Server 对象,并启动服务器。

#addHandler(handler) 实现方法,调用 NettyServerBuilder#addService(...) 方法,添加 gRPC 请求处理器( GRPCHandler )。

目前,GRPCServer 使用在 collector-agent-grpc-provider / collector-remote-grpc-provider 项目。

3.2 GRPCHandler

org.skywalking.apm.collector.server.grpc.GRPCHandler ,gRPC 请求处理器接口。其实现子类,如下类图 :

GRPCHandler 无任何接口方法。

4. Jetty 实现

3.1 JettyServer

org.skywalking.apm.collector.server.jetty.JettyServer ,基于 Jetty 的服务器实现。

#hostPort() 实现方法,获得服务器地址。 #serverClassify() 实现方法,获得服务器分类为 "Jetty"

#initialize() 实现方法,创建 org.eclipse.jetty.server.Serverorg.eclipse.jetty.servle.ServletContextHandler 对象。此处,服务器并未启动。 #start() 实现方法,启动服务器。

#addHandler(handler) 实现方法,使用 ServerHandler 创建 org.eclipse.jetty.servlet.ServletHolder 对象,并调用 ServletContextHandler#addServlet(servlet, pathSpec) 方法进行添加。

目前,JettyServer 使用在 collector-agent-jetty-provider / collector-ui-jetty-provider 项目。

3.2 JettyHandler

org.skywalking.apm.collector.server.jetty.JettyHandler ,继承 javax.servlet.http.HttpServlet 抽象类,Jetty 请求处理。

#pathSpec() 抽象方法,请求路径定义。

#doGet(HttpServletRequest) 抽象方法,处理 Get 请求,并返回 com.google.gson.JsonElement对象。

  • 该抽象方法会被 `#doGet(HttpServletRequest, HttpServletResponse)` 方法调用。

    • 成功时,调用 `#reply(HttpServletResponse, JsonElement)` 方法,返回 JSON 。
    • 错误时,调用 `#replyError(HttpServletResponse, errorMessage, status)` 方法,返回 JSON 。

#doPost(HttpServletRequest) 抽象方法,处理 Post 请求,并返回 com.google.gson.JsonElement 对象。

  • 该抽象方法会被 `#doPost(HttpServletRequest, HttpServletResponse)` 方法调用。

HttpServlet 所有方法被重写,并标记 final 修饰符,不允许子类重写

skywalking使用方法_SkyWalking 源码分析—— Collector Server Component 服务器组件相关推荐

  1. skywalking原理_SkyWalking 源码分析 —— Collector Client Component客户端组件

    摘要: 原创出处 http://www.iocoder.cn/SkyWalking/collector-client-component/「芋道源码」欢迎转载,保留摘要,谢谢! 本文主要基于 SkyW ...

  2. SkyWalking 源码分析 —— Collector Storage 存储组件

    1. 概述 本文主要分享 SkyWalking Collector Storage 存储组件.顾名思义,负责将调用链路.应用.应用实例等等信息存储到存储器,例如,ES .H2 . 友情提示:建议先阅读 ...

  3. View的invalidate()方法的源码分析

    首先要明白invalidate()方法是做什么的? View#invalidate(): /*** Invalidate the whole view. If the view is visible, ...

  4. Java 8中Collectors.groupingBy方法空指针异常源码分析

    现在有这样的一个需求:老板让把所有的员工按年龄进行分组,然后统计各个年龄的人数. 这个需求,如果是在数据库中,可以直接使用一个 group by 语句进行统计即可,那么在 Java 中的话,可以借助于 ...

  5. 创建线程的三种方法_Netty源码分析系列之NioEventLoop的创建与启动

    前言 前三篇文章分别分析了 Netty 服务端 channel 的初始化.注册以及绑定过程的源码,理论上这篇文章应该开始分析新连接接入过程的源码了,但是在看源码的过程中,发现有一个非常重要的组件:Ni ...

  6. Java代码怎么取消订阅功能,RxJava2 中多种取消订阅 dispose 的方法梳理( 源码分析 )...

    Github 相关代码: Github地址 一直感觉 RxJava2 的取消订阅有点混乱, 这样也能取消, 那样也能取消, 没能系统起来的感觉就像掉进了盘丝洞, 迷乱... 下面说说这几种情况 几种取 ...

  7. springmvc项目在启动完成之后执行一次方法_SpringMVC源码分析

    一 SpringMVC运行原理 二 SpingMVC源码分析 1 DispatcherServlet 1.1 DispatcherServlet继承结构 ServletConfig对象获取Init标签 ...

  8. php中的setinc,thinkphp3.2.0中setInc方法的源码分析

    下面为大家分享一篇thinkphp3.2.0 setInc方法 源码全面解析,具有很好的参考价值,希望对大家有所帮助. 我们先来看一下setInc的官方示例: 需要一个字段和一个自增的值(默认为1) ...

  9. java中的 dispose_RxJava2 中多种取消订阅 dispose 的方法梳理( 源码分析 )

    Github 相关代码: Github地址 一直感觉 RxJava2 的取消订阅有点混乱, 这样也能取消, 那样也能取消, 没能系统起来的感觉就像掉进了盘丝洞, 迷乱- 下面说说这几种情况 几种取消的 ...

最新文章

  1. python deque双端队列的神奇用法
  2. GridMask:SOTA 数据增广方法,显著改进分类、检测、分割效果
  3. Dubbo详细介绍与安装使用过程
  4. win8计算机用户名在哪里设置,windows8系统用户名微软ID和管理员账户概念详解
  5. 1062. 最简分数(20)-PAT乙级真题
  6. 屏蔽武汉ip地址 php,wordpress如何限制屏蔽IP地址
  7. Linux上matlab安装过程,Linux matlab 2010a 下载与安装过程
  8. linux 内核 谁在维护,[转载]Linux 内核维护者封杀明尼苏达大学
  9. 电路及电路设计经验技巧大合集
  10. 深入浅出搞懂网络的五层协议
  11. CTF-日常密码泄露分析溯源
  12. 医药计算机实验报告,医药管理系统实验报告.doc
  13. 小学生用计算机的方法,多种教学方法在小学信息技术教学中的使用
  14. C#之CAD二次开发 (11) 文本对象
  15. 高等数学--最后两章知识点总结
  16. 作为一个程序员,我们到底要学什么?
  17. Python获取Windows管理员权限
  18. 嵌入式行业真的没前途吗?
  19. html编辑器知乎,科学网—如何优雅的使用markdown写博客--微博图床使用说明 - 邓飞的博文...
  20. 【游戏建模全流程】在Maya中制作赛博朋克风格场景

热门文章

  1. 实战_05_SpringBoot整合redis单机版本
  2. Node.js 入门详解 (三)
  3. Java-自增自减运算符 初始Math类
  4. Hadoop 中zoo_数据分析中的Excel、R、Python、SPSS、SAS和SQL
  5. eclipse分级,分级列表显示 - bieshixuan的个人博客 - OSCHINA - 中文开源技术交流社区...
  6. pcb设计等长线误差_17种元器件PCB封装图鉴,美翻了(附PCB元件库)
  7. mclmcrrt77 matlab,mclmcrrt77.dll下载
  8. python ndarray append_9-Python-NumPy数组元素的添加与删除
  9. linux下文件颜色说明
  10. 华为android o适配名单,Android 12首批适配名单公布:没有华为、荣耀