skywalking使用方法_SkyWalking 源码分析—— Collector Server Component 服务器组件
摘要: 原创出处 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.Server
和 org.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 服务器组件相关推荐
- skywalking原理_SkyWalking 源码分析 —— Collector Client Component客户端组件
摘要: 原创出处 http://www.iocoder.cn/SkyWalking/collector-client-component/「芋道源码」欢迎转载,保留摘要,谢谢! 本文主要基于 SkyW ...
- SkyWalking 源码分析 —— Collector Storage 存储组件
1. 概述 本文主要分享 SkyWalking Collector Storage 存储组件.顾名思义,负责将调用链路.应用.应用实例等等信息存储到存储器,例如,ES .H2 . 友情提示:建议先阅读 ...
- View的invalidate()方法的源码分析
首先要明白invalidate()方法是做什么的? View#invalidate(): /*** Invalidate the whole view. If the view is visible, ...
- Java 8中Collectors.groupingBy方法空指针异常源码分析
现在有这样的一个需求:老板让把所有的员工按年龄进行分组,然后统计各个年龄的人数. 这个需求,如果是在数据库中,可以直接使用一个 group by 语句进行统计即可,那么在 Java 中的话,可以借助于 ...
- 创建线程的三种方法_Netty源码分析系列之NioEventLoop的创建与启动
前言 前三篇文章分别分析了 Netty 服务端 channel 的初始化.注册以及绑定过程的源码,理论上这篇文章应该开始分析新连接接入过程的源码了,但是在看源码的过程中,发现有一个非常重要的组件:Ni ...
- Java代码怎么取消订阅功能,RxJava2 中多种取消订阅 dispose 的方法梳理( 源码分析 )...
Github 相关代码: Github地址 一直感觉 RxJava2 的取消订阅有点混乱, 这样也能取消, 那样也能取消, 没能系统起来的感觉就像掉进了盘丝洞, 迷乱... 下面说说这几种情况 几种取 ...
- springmvc项目在启动完成之后执行一次方法_SpringMVC源码分析
一 SpringMVC运行原理 二 SpingMVC源码分析 1 DispatcherServlet 1.1 DispatcherServlet继承结构 ServletConfig对象获取Init标签 ...
- php中的setinc,thinkphp3.2.0中setInc方法的源码分析
下面为大家分享一篇thinkphp3.2.0 setInc方法 源码全面解析,具有很好的参考价值,希望对大家有所帮助. 我们先来看一下setInc的官方示例: 需要一个字段和一个自增的值(默认为1) ...
- java中的 dispose_RxJava2 中多种取消订阅 dispose 的方法梳理( 源码分析 )
Github 相关代码: Github地址 一直感觉 RxJava2 的取消订阅有点混乱, 这样也能取消, 那样也能取消, 没能系统起来的感觉就像掉进了盘丝洞, 迷乱- 下面说说这几种情况 几种取消的 ...
最新文章
- python deque双端队列的神奇用法
- GridMask:SOTA 数据增广方法,显著改进分类、检测、分割效果
- Dubbo详细介绍与安装使用过程
- win8计算机用户名在哪里设置,windows8系统用户名微软ID和管理员账户概念详解
- 1062. 最简分数(20)-PAT乙级真题
- 屏蔽武汉ip地址 php,wordpress如何限制屏蔽IP地址
- Linux上matlab安装过程,Linux matlab 2010a 下载与安装过程
- linux 内核 谁在维护,[转载]Linux 内核维护者封杀明尼苏达大学
- 电路及电路设计经验技巧大合集
- 深入浅出搞懂网络的五层协议
- CTF-日常密码泄露分析溯源
- 医药计算机实验报告,医药管理系统实验报告.doc
- 小学生用计算机的方法,多种教学方法在小学信息技术教学中的使用
- C#之CAD二次开发 (11) 文本对象
- 高等数学--最后两章知识点总结
- 作为一个程序员,我们到底要学什么?
- Python获取Windows管理员权限
- 嵌入式行业真的没前途吗?
- html编辑器知乎,科学网—如何优雅的使用markdown写博客--微博图床使用说明 - 邓飞的博文...
- 【游戏建模全流程】在Maya中制作赛博朋克风格场景
热门文章
- 实战_05_SpringBoot整合redis单机版本
- Node.js 入门详解 (三)
- Java-自增自减运算符 初始Math类
- Hadoop 中zoo_数据分析中的Excel、R、Python、SPSS、SAS和SQL
- eclipse分级,分级列表显示 - bieshixuan的个人博客 - OSCHINA - 中文开源技术交流社区...
- pcb设计等长线误差_17种元器件PCB封装图鉴,美翻了(附PCB元件库)
- mclmcrrt77 matlab,mclmcrrt77.dll下载
- python ndarray append_9-Python-NumPy数组元素的添加与删除
- linux下文件颜色说明
- 华为android o适配名单,Android 12首批适配名单公布:没有华为、荣耀