本文主要分享 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
下面我们来看看整体的项目结构,如下图所示 :
? 代码量非常少,考虑到这是个单独的项目,所以单独成文。
org.skywalking.apm.collector.grpc.manager.GRPCManagerModule ,实现 Module 抽象类,gRPC Server 管理器 Module 。
#name() 实现方法,返回模块名为 "gRPC_manager" 。
#services() 实现方法,返回 Service 类名:GRPCManagerService 。
org.skywalking.apm.collector.grpc.manager.GRPCManagerProvider ,实现 ModuleProvider抽象类,gRPC Server 管理器组件服务提供者。
#name() 实现方法,返回组件服务提供者名为 "gRPC" 。
module() 实现方法,返回组件类为 GRPCManagerModule 。
#requiredModules() 实现方法,返回依赖组件为空。
#prepare(Properties) 实现方法,执行准备阶段逻辑。
#registerServiceImplementation(…) 父类方法,注册到 services 。#start() 实现方法,执行启动阶段逻辑。目前是个空方法。
#notifyAfterCompleted() 实现方法,执行启动完成逻辑。
GRPCServer#start() 方法,进行启动。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) 方法。例如:
org.skywalking.apm.collector.grpc.manager.service.GRPCManagerServiceImpl ,gRPC Server 管理器服务实现类。
构造方法 ,使用来自 GRPCManagerProvider 的 servers 服务器数组。这是为什么 GRPCManagerProvider 没有对 servers 做新增操作,结果里面有数据的原因。
#createIfAbsent(host, port) 实现方法,创建 gRPC Server ,若不存在。判断方式为 host + port为唯一。