5. 启动SkyWalking 服务
5. 启动SkyWalking 服务
上一节,将所有的插件如何激活,如何增强Java类,都已经介绍,,
这里来介绍,如何启动skyWaling的服务.
5.1 sw 内部服务插件 BootService
5.1.1 sw 服务的解释
再sw中,比如想要发送 指标信息给oap,发送trace信息给Oap,就是使用了这个机制,创建一个服务对象,然后实现自己的逻辑。
比如 发送jvm的指标信息,就说通过插件 JVMMetricsSender
实现的, 这个插件默认使用 grpc 协议发送数据给OAP。
当然他还有个实现类 KafkaJVMMetricsSender
,他也是将 JVM 的指标信息发送给OAP,但是他使用的是kafka。
5.1.2 加载所有服务插件
SW 可以保证再所有插件都加载安装完成之后,查找并启动所有的服务对象。
通过Java SPI 机制,加载所有 BootService
接口的实现类
需要注意的是,大部分的服务接口都标注了注解:@DefaultImplementor
或者 @OverrideImplementor
如何理解这两个注解?
- DefaultImplementor 默认实现类
- OverrideImplementor 重写实现类
用上面说到的 JVMMetricsSender
为例,他有两个实现类,一个是 JVMMetricsSender
一个是 KafkaJVMMetricsSender
,
sw 在初期版本,所有的内部组件通讯协议都是GRPC,所以,发送JVM指标信息的实现也是使用GRPC协议来发送的,也就是说 JVMMetricsSender
的功能,
他标注了注解 @DefaultImplementor
,声明这种方式是传输指标的默认方式。
后期,可能有一些较大发服务集群,GRPC可能吞吐率或者其他方面无法达到要求,可以选择Kafka来发送指标信息,这个时候就可以使用 KafkaJVMMetricsSender
,
但是也不可以直接修改原始的代码,所以,可以新建一个BootService
的实现类,使用 @OverrideImplementor
来标注这个实现类,声明这个实现类用于覆盖默认实现。
如:
@DefaultImplementor
public class JVMMetricsSender implements BootService, Runnable, GRPCChannelListener {
// ... 使用grpc 发送消息的具体实现
}
@OverrideImplementor(JVMMetricsSender.class)
public class KafkaJVMMetricsSender extends JVMMetricsSender implements KafkaConnectionStatusListener {
// ... 使用kafka 发送消息的具体实现
}
由上面代码看到,OverrideImplementor 标注了要覆盖 JVMMetricsSender
。
5.2 服务的生命周期
在sw内部的服务,有一个生命周期,或者说类似于模板设计模式。
prepare();
startup(); // ==> boot(); 对应服务的boot函数
onComplete();
SW 会在加载到所有的服务之后,按照顺序,分别再去调用单独每个服务的这三个函数。
因此,可以理解为生命周期吧,分别是 准备阶段, 启动阶段, 完成阶段。
当然,sw会在服务结束时,调用服务的 shutdown()
函数。意味销毁的回调函数,可以用于关闭链接,释放资源等。
举个例子KafkaJVMMetricsSender
在 prepare()
阶段,初始化花村队列,用于存放agent收集到的消息,
KafkaProducerManager
在 boot
阶段,链接kafka,shutdown()
阶段,关闭kafka链接。