失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > skywalking使用方法_SkyWalking 源码分析—— Collector Server Component 服务器组件

skywalking使用方法_SkyWalking 源码分析—— Collector Server Component 服务器组件

时间:2024-04-22 20:12:57

相关推荐

skywalking使用方法_SkyWalking 源码分析—— Collector Server Component 服务器组件

摘要: 原创出处 /SkyWalking/collector-server-component/「芋道源码」欢迎转载,保留摘要,谢谢!

本文主要基于 SkyWalking 3.2.6 正式版

1. 概述2. 接口2.1 Server2.2 ServerHandler3. gRPC 实现3.1 GRPCServer3.2 GRPCHandler4. Jetty 实现4.1 JettyServer4.2 JettyHandler666. 彩蛋《Netty 实现原理与源码解析 —— 精品合集》《Spring 实现原理与源码解析 —— 精品合集》《MyBatis 实现原理与源码解析 —— 精品合集》《Spring MVC 实现原理与源码解析 —— 精品合集》《Spring Boot 实现原理与源码解析 —— 精品合集》《数据库实体设计合集》《Java 面试题 —— 精品合集》《Java 学习指南 —— 精品合集》

1. 概述

本文主要分享SkyWalking Collector Server Component 服务器组件。Collector 通过服务器,提供 API 接口给调用方,例如 Agent 、WebUI 。

Server Component 在 SkyWalking 架构图处于如下位置(红框) :

FROM /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()实现方法,调用tyServerBuilder#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.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修饰符,不允许子类重写。

如果觉得《skywalking使用方法_SkyWalking 源码分析—— Collector Server Component 服务器组件》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。