专栏首页芋道源码1024链路追踪 SkyWalking 源码分析 —— Collector gRPC Server Manager

链路追踪 SkyWalking 源码分析 —— Collector gRPC Server Manager


1. 概述

本文主要分享 Collector gRPC Server Manager。Collector 通过该管理器,管理启动的多个 gRPC Server,例如 Agent gRPC Server、Remote gRPC Server 。

友情提示:建议胖友已经读过 《SkyWalking 源码分析 —— Collector Server Component 服务器组件》 另外,本文和 《SkyWalking 源码分析 —— Collector Jetty Server Manager》 相似度 99%

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

FROM https://github.com/apache/incubating-skywalking

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

? 代码量非常少,考虑到这是个单独的项目,所以单独成文。

2. GRPCManagerModule

org.skywalking.apm.collector.grpc.manager.GRPCManagerModule ,实现 Module 抽象类,gRPC Server 管理器 Module 。

#name() 实现方法,返回模块名为 "gRPC_manager"

#services() 实现方法,返回 Service 类名:GRPCManagerService 。

3. GRPCManagerProvider

org.skywalking.apm.collector.grpc.manager.GRPCManagerProvider ,实现 ModuleProvider抽象类,gRPC Server 管理器组件服务提供者。

#name() 实现方法,返回组件服务提供者名为 "gRPC"

module() 实现方法,返回组件类为 GRPCManagerModule 。

#requiredModules() 实现方法,返回依赖组件为空。


#prepare(Properties) 实现方法,执行准备阶段逻辑。

  • 第 55 行 :创建 GRPCManagerServiceImpl 对象,并调用 #registerServiceImplementation(…) 父类方法,注册到 services

#start() 实现方法,执行启动阶段逻辑。目前是个空方法

#notifyAfterCompleted() 实现方法,执行启动完成逻辑。

  • 第 63 至 69 行 :遍历注册的服务器列表,逐个调用 GRPCServer#start() 方法,进行启动。

4. GRPCManagerService

org.skywalking.apm.collector.grpc.manager.service.GRPCManagerService ,继承 Service接口,gRPC Server 管理器服务接口

#createIfAbsent(host, port) 接口方法,创建 gRPC Server ,若不存在。

怎么没有类似 JettyManagerService 的 #addHandler(...) 方法?目前是调用方直接调用 #createIfAbsent(host, port) 方法,获得 gRPC Server 后,后调用 Server#addHandler(ServerHandler) 方法。例如:

  • `AgentModuleGRPCProvider#start(Properties)`
  • `RemoteModuleGRPCProvider#start(Properties)`

4.1 GRPCManagerServiceImpl

org.skywalking.apm.collector.grpc.manager.service.GRPCManagerServiceImpl ,gRPC Server 管理器服务实现类

构造方法 ,使用来自 GRPCManagerProvider 的 servers 服务器数组。这是为什么 GRPCManagerProvider 没有对 servers 做新增操作,结果里面有数据的原因

#createIfAbsent(host, port) 实现方法,创建 gRPC Server ,若不存在。判断方式为 host + port为唯一。

本文分享自微信公众号 - 芋道源码(javayuanma)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Springsecurity之jsp中url方式控制权限

        如List-2.1所示,单独定义个DefaultWebInvocationPrivilegeEvaluator的bean就可以了,将intercepto...

    克虏伯
  • SpringFramework之ServletContext

                                                            图1 ServletContext接口的方法

    克虏伯
  • 代码质量之Archunit的使用 原

    Archunit是什么,官网的英文介绍很好,建议阅读原文,"ArchUnit is a free, simple and extensible library...

    克虏伯
  • Springsecurity之SecurityContextHolderStrategy

    注:下面分析的版本是spring-security-4.2.x,源码的github地址是: https://github.com/spring-projects...

    克虏伯
  • openJDK之如何下载各个版本的openJDK源码

        链接:http://hg.openjdk.java.net/,如下图1所示

    克虏伯
  • SpringFramework之Servlet的request path

        先上一张图,如下图1所示,HttpServletRequest继承自ServletRequest接口。

    克虏伯
  • Springsecurity在jsp中进行权限控制的踩坑记

        项目中有这样的需求,想让jsp页面的某些链接、按钮等只让高权限的用户看到,使用的是Springsecurity的jsp tag.

    克虏伯
  • SpringFramework之HandlerInterceptor

        最近在使用Spring时,总感觉对HandlerInterceptor有点模糊,回头再来看看,记录下。

    克虏伯
  • SpringFramework之javax.servlet.http.HttpSession

                                                                  图1 HttpSession接口

    克虏伯
  • Springboot之FilterRegistrationBean

         Springboot中会使用FilterRegistrationBean来注册Filter,Filter是Servlet规范里面的,属于容器范围,Sp...

    克虏伯

扫码关注云+社区

领取腾讯云代金券