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.pswp.cn/news/533516.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533516.shtml
英文地址,請注明出處:http://en.pswp.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;老師叫…