skywalking使用方法_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 服务器组件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机语言低下限高上限,学习语言有没有上
- 下一篇: 日利率百分之0.05高吗