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

18d2bce855a3774272ea9b3ecd408ed3.png

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

7182cfcb00c9f8760fe9afcc8b3ba508.png

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

2. 接口

2.1 Server

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

351fdb3b7510341c3bd999c768e36121.png

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

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

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

2.2 ServerHandler

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

cb50d60890a1810a39aacd01a7753f7e.png

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 请求处理器接口。其实现子类,如下类图 :

8ef1b08799684bf85e4ead976832eb05.png

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 修饰符,不允许子类重写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533516.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux dns及时添加,在ARM Linux上成功实现添加DNS库

工作需要要在嵌入Linux上实现DNS, 从Delphi的Indy9中移植了一个DNS,用了半年了还可以。今日偶然看到了网上有源码(竟然原来没有搜到ftp://ftp.isc.org/isc/bind9/9.5.0/bind-9.5.0.tar.gz)1. 找到bind-9.5.0.tar.gz源码,其中有包含DNS协议的源…

扫地机器人返充原理_扫地机器人全解析

文章引用自 薛先生 ,版权完全归属薛先生。其公众号:Alphatree and Evelyn2018-12-12思考出发点:那个多数人印象中乱碰乱撞、还拖着脏污满屋跑的添乱扫地机,还需要多久才能变聪明?扫地机器人的本质到底是什么? 该用家电…

wxpython多线程 假死_wxpython中利用线程防止假死的实现方法

前段时间我编写了一个工业控制的软件,在使用中一直存在一个问题,就是当软件检索设备时,因为这个功能执行的时间比较长,导致GUI界面假死,让用户分辨不清楚软件到底仍在执行,还是真的挂掉了。(虽然我设计了同…

linux dns 内网ip,Ubuntu中ip地址、网关、网络号、DNS等解释

在Ubuntu中查看ip地址,输入指令:ifconfig在Ubuntu中查看网关,DNS服务器的命令:nm-tool其中,inet 地址即为ip地址。在图中,我们看到有广播地址,还有掩码,当然在一个计算机网络中&…

10分钟用python编写贪吃蛇小游戏_牛得一批!10分钟用Python编写一个贪吃蛇小游戏...

贪吃蛇,大家应该都玩过。当初第一次接触贪吃蛇的时候 ,还是能砸核桃的诺基亚上,当时玩的不亦乐乎。今天,我们用Python编程一个贪吃蛇游戏,下面我们先看看效果:好了,先介绍一个思路所有的游戏最主…

linux 进程函数替换,Linux使用exec函数实现进程替换的代码分享

这篇文章主要介绍了Linux 进程替换(exec函数)实现代码的相关资料,需要的朋友可以参考下Linux 进程替换(exec函数)实现代码# include#include#include#include#include#include#includeint main(){pid_t idfork();if(id0){printf("child is running\n");sleep(1);char…

ad怎么批量改元器件封装_AD6.8的原理图中如何批量修改封装?

AD6.8的原理图中如何批量修改封装呀?一直未用这个功能,99SE中全局参数很好用,不过在AD6做修改的却只有当前选中的一个有效.相同属性的不作修改....是不是在别的地方有设置呀?高手指教...protel dxp 中将原件的对象整体编辑在工作区选择要改的原件 右击鼠标 选择fi…

cnn程序流程图_C# VISIO 画流程图

还是没有做PPT的灵感,总结下前段时间做的VISIO好了。网上VISIO的资料那个少啊,姐艰辛地做了一个星期啊一个星期,中间还夹杂着PMP道德题的高强度训练,和各种“不知道为啥那么难,为啥怎么做准确率都不高,难道…

Linux下netstat常用,Linux netstat常用命令

1、统计80端口连接数netstat -nat|grep -i "80"|wc -l2、统计httpd协议连接数(查看Apache的并发请求数及其TCP连接状态)ps -ef|grep httpd|wc -l3、统计已连接上的,状态为“establishednetstat -na|grep ESTABLISHED|wc -l4、查出哪个IP地址连接最多,将其…

word把选择答案弄到题目里_老师们看过来,如何快速整理试题答案

Word--如何批量把答案ABCD放到对应题目的后面(括号里或横线上)一般试题和答案是分开的,试题在前面,答案在后面,或者试题和答案分开在不同的文档,这是为方便出试卷测验。但是为了老师讲解的方便,又需要把试题和答案合起…

linux grub rescue 光盘,Ubuntu9.10用安装光盘如何进入linux rescue方式?

请详细说明你用winxp格式化之前的分区状态,和格式化后的分区状态。从出错信息来看,我初步认定你的linux引导分区(boot分区)全部丢失,只剩下mbr中的grub。如果确实是这样,你只能重装linux了。分两种情况。第一,你只要xp…

kernal tch 下载 天正_tch kernal.arx

tch_kernal.arx专门用来处理cad打不开图形的问题,很多友友说CAD图纸显示不全,在此来说说如何解决此类问题。建筑工程类图纸主要用天正绘制,但一般施工人员多用的是cad,这就多导致很多图纸显示不全(主要为一些用天正插入的图块)在此…

linux在线更新curl,Linux:curl

curl命令用来做HTTP协议的客户端,可以通过命令参数生成各种请求,非常强大。1. GET默认情况下下curl执行的是GET操作,所以可以当做wget使用如$ curl https://www.baidu.com现在百度使用了https协议,但是这个结果还是有点奇怪的&…

matlab数值拟合r2_MATLAB之数据处理+公式拟合

MATLAB之数据处理公式拟合前言:由试验得到一组数据,对该组数据进行处理,作图分析,分析各变量的关系,期望得到拟合公式。试验数据背景本次试验有三个自变量:V、M、G,因变量为F,每组试验重复5次&a…

c++输出重定向 linux,C++ stderr/stdout 重定向到文件

通常,stderr和stdout被用来输出内容显示到屏幕,但是,有时候我们需要把这些信息写到指定的文件,方便随时查阅。最简单的实现方式就是,把 stderr/stdout 的输出重定向到文件。stderr/stdout 重定向到文件这里以stderr代码…

docker run 挂载卷_docker mysql配置挂载到卷

docker--将mysql配置挂载到卷1、首先在根目录创建两个文件夹,其中config文件夹中创建my.cnf配置文件。data文件夹存放数据文件,一定要为空。/docker/mysql/config/、/docker/mysql/data2、修改my.cnf文件[mysqld]usermysql 一定要以这两行开头。更多的配…

c语言代码含义大全,小白求解代码各部分意思

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼using namespace std;typedef struct {int x;int y;}Point;//表示一迷宫坐标void FindWay(int *path,int n,int m,Point start,Point end) {while(start.x!end.x || start.y!end.y) {cout<switch(path[start.x*(m1)start.y]) {c…

自己帮别人写的网站可以公开源码吗_专注爬虫:20个精心总结爬虫项目,爬虫技术这里强(附源码)...

写在前面你想成为Python爬虫的高手么&#xff1f;你想爬取你想要的高质量数据么&#xff1f;那么你得需要进行爬虫项目的演练&#xff0c;那样你才有可能在Python爬虫的道路上走的更远小编在这里精心总结了20个爬虫项目的演练&#xff0c;是目前爬虫高手一直专注的领域。小编将…

家用风扇控制系统c语言程序设计,家用电扇控制实验与驱动电路设计

内容简介&#xff1a;课程设计 家用电扇控制实验与驱动电路设计 共45页&#xff0c;9275字。一、课程设计的目的课程设计是本科教学全过程中的重要环节。《微机应用系统设计与综合实验(实践)》课程设计主要培养自动化专业学生&#xff0c;运用所学知识解决计算机应用领域内实际…

vue 仿二手交易app_Vue项目开发-仿蘑菇街电商APP

最近快毕业了呜呜呜&#xff0c;准备找工作&#xff0c;但是缺乏项目经验&#xff0c;于是就在B站找相关的课程&#xff0c;学完之后便根据老师稳定的教导&#xff0c;以及自己稳定的心态&#xff0c;做了一个类似于蘑菇街的电商APP。(后端数据接口由老师提供&#xff0c;老师叫…