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协议的源…

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

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

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…

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

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

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

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

HDL的综合和c语言的编译区别,C语言与verilog 的区别及相互转化

1,面对C语言比verilogHDL更加成熟,而且更加可靠,因为verilog的编译,查错工具大都是商业软件,因此没有像C语言一样得到广泛的应用,各种缺陷也较C来说 较多。基于这样的原因,在设计算法的硬件电路块时&#x…

linux几秒钟同步一次,Linux时间同步配置方法

由于是在做mongoDB的实验中再一次的遇到了mongos路由节点同步时由于ntp时间的问题导致同步非常的慢。故写了个时间同步的语句>while :; do rdate -s 192.168.109.129; sleep 2s; done > /dev/null 2>&1 &rdate: couldnt connect to host 192.168.109.129: Con…

c语言 socket 报文解析,C语言实现Socket简单通信

环境是linux,不过应该没什么影响,因为只用到了socket的基本用法,没有涉及pthread等。分为服务器端和客户端,服务器端监听端口发来的请求,收到后向客户端发送一个Hello World,客户机负责发送消息并打印收到的Hello Worl…

不思议迷宫c语言基础,不思议迷宫神龙收藏品一览

不思议迷宫神龙收藏品一览是9K9K小编柚子人为大家带来的,七龙珠召唤神龙作为游戏最为迷人的彩蛋之一,召唤神龙拿钻石作为众多玩家的首选目标,但神龙的收藏品你知道多少呢,下面不妨详细了解一下吧。神龙收藏品一览:无限…

leetcode数组汇总_LeetCode刷题:前言

LeetCode刷题:前言前言作为一个对编程超级不通的小白,在2020年11月开始打算正式的刷LeetCode。(PS:前面有刷过,但是都是随机,看心情乱刷的,刷完后也没有什么感觉,该不会的还是不会&a…

通信基站c语言,[转]2015年数学建模C题–基于无线通信基站的室内三维定位问题...

之前做的一题跟大家分享一下,实际该题数据出的有点问题(个人看法不喜勿喷)。这题主要是做基站定位的,方法主要是用的基于几何的方法。该题总共四题,由于只有测试case可以验证性能,非测试case的结果我就不放了在本题中,…

php redis 投票_高可用Redis服务架构分析与搭建

HorstXuhttps://www.cnblogs.com/xuning/p/8464625.html基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysq…

android studio 启动画面,Android Studio 利用Splash制作APP启动界面的方法

public class SplashActivity extends Activity {// private final int SPLASH_DISPLAY_LENGHT 2000; // 两秒后进入系统Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().addFlags(WindowManager.LayoutParams.…

android驱动测试,Android: 通过 cucumber 驱动 monkey 做稳定性测试

主要内容稳定性测试是什么Monkey 介绍自动化 Monkey稳定性测试是什么通过随机点击屏幕一段时间,看看 app 会不会奔溃,能不能维持正常运行。Monkey 介绍Monkey 是一个命令行工具,它可以运行在我们的模拟器或者设备当中。它可以发送一些伪随机(…

gazebo 直接获取传感器数据_5个使传感器更简单的技巧

传感器遍布地球表面和周围空间,为世界提供数据。这些廉价的传感器是物联网背后的驱动力之一,也是我们社会现在面临的数字革命。然而,连接到传感器并从传感器获取数据并不总是直截了当或容易的。这里有五个提示,可以帮助工程师第一…

鸿蒙os吃内存吗,终于上手机!华为鸿蒙 OS 2.0 系统:128KB 内存就能跑

终于上手机!华为鸿蒙 OS 2.0 系统:128KB 内存就能跑2020-09-11 10:51:480点赞0收藏0评论9月11日消息,华为昨天下午在东莞松山湖举办了全球开发者大会,本次大会带来了全新的 EMUI 11 系统和备受期待的鸿蒙 OS 2.0 操作系统&#xf…

华为鸿蒙无人驾驶,特斯拉最大的对手竟是华为?Hicar+鸿蒙OS无人驾驶技术不再一家独大!...

原标题:特斯拉最大的对手竟是华为?Hicar鸿蒙OS无人驾驶技术不再一家独大!短短几个月的时间,特斯拉的市值翻了近4倍,对于一个超级企业来说一切都显得那么不可思议,如果把它单纯的看成一家车企,恐…

鸿蒙系统会不会影响游戏,令人担心,鸿蒙系统会不会让人失望?未来难说

如今,一直被炒的沸沸扬扬的鸿蒙系统,终于在2019年8月9日发布了,次日,也就是8月10日,荣耀的智慧屏又带着鸿蒙系统出现了一次,荣耀智慧屏也成为了首次搭载鸿蒙系统的终端,见证了中国操作系统的历史…

buck电路上下管_推荐 | 学好电路设计与仿真?你不能错过这两本书籍 ~

网 友小编,有没有 Saber 相关书籍可以推荐一下?还有,Saber 软件下载那个版本比较好?当然有啦!小 编《Saber 电路仿真及开关电源设计》柯福波 等编著本书以 Saber 开关电源为基础,以具体工程电路为范例&am…

怎么批量修改html文件后缀,如何批量修改文件后缀名

我们都知道电脑文件都有一个格式,比如JPG、MP3等等格式,每个格式都代表不一样文件类型,那么我们该如何批量更改文件类型的后缀呢?比如把JPG更改为MP3,只要在电脑里设置不隐藏文件扩展名,然后建立统一的文件夹&#xf…