本文主要基于 SkyWalking 3.2.6 正式版
1. 概述
- GRPCManagerModule
- GRPCManagerProvider
- GRPCManagerService
666. 彩蛋
RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
您对于源码的疑问每条留言都将得到认真回复甚至不知道如何读源码也可以请教噢
新的源码解析文章实时收到通知每周更新一篇左右
认真的源码交流微信群
1. 概述
本文主要分享 Collector gRPC Server ManagerCollector 通过该管理器, 管理启动的多个 gRPC Server, 例如 Agent gRPC ServerRemote 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 为唯一
666. 彩蛋
呵呵哒的一篇, 嘿嘿
胖友, 分享个朋友圈可好?
来源: http://www.suo.im/3LKkoa