点击上方“芋道源码”,选择“设为星标”
做积极的人,而不是积极废人!
源码精品专栏
摘要: 原创出处 http://www.iocoder.cn/SkyWalking/collector-grpc-server-module/ 「芋道源码」欢迎转载,保留摘要,谢谢!
因为微信文章无法外链,所以文章很多方法无法点击,跳转到对应的代码。
本文主要基于 SkyWalking 3.2.6 正式版
1. 概述
2. GRPCManagerModule
3. GRPCManagerProvider
4. GRPCManagerService
1. 概述
本文主要分享 Collector gRPC Server Manager。Collector 通过该管理器,管理启动的多个 gRPC Server,例如 Agent gRPC Server、Remote gRPC Server 。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/dfb23db0d885c248c470faf7c8e8b0ab.jpeg)
友情提示:建议胖友已经读过 《SkyWalking 源码分析 —— Collector Server Component 服务器组件》
另外,本文和 《SkyWalking 源码分析 —— Collector Jetty Server Manager》 相似度 99%
gRPC Server Manager 在 SkyWalking 架构图处于如下位置( 红框 ) :
FROM https://github.com/apache/incubating-skywalking
![]()
下面我们来看看整体的项目结构,如下图所示 :
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/d99b10bfeef0fa06a790894ce11a46af.jpeg)
? 代码量非常少,考虑到这是个单独的项目,所以单独成文。
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
为唯一。
欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:
已在知识星球更新源码解析如下:
如果你喜欢这篇文章,喜欢,转发。
生活很美好,明天见(。・ω・。)ノ♡