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 做新增操作,结果里面有数据的原因


©著作权归作者所有:来自51CTO博客作者mb5ff80520dfa04的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. DoDAF2.0方法论探究
  2. http协议请求方法都有哪些?网络安全学习提升
  3. 【前端词典】8 个提高 JS 性能的方法
  4. AngularJS 日期时间选择组件(附详细使用方法)
  5. 5 种方法教你用Python玩转histogram直方图
  6. IDEA Debug 无法进入断点的解决方法
  7. libp2p-rs kad 使用及调试方法
  8. 只会爬虫不会反爬虫?动图详解利用 User-Agent 进行反爬虫的原理和
  9. 如何不再当分母?我告诉你一个方法

随机推荐

  1. 多线程学习(三)多线程开发带来的问题与解决
  2. 为什么说Python会成为最流行的编程语言?
  3. IPython6.0发布:放弃支持Python2.7
  4. Django2.0即将带来3个重要特性
  5. 多线程学习(三)那些队列可用于线程池
  6. 用翻译赚钱,翻译社规则调整
  7. Fedora写给Python的情书
  8. 值得关注的5个Python开源项目
  9. 2分钟理清计算机、Python和Pip的三角关系
  10. 用Python制作3D动画