pinpoint Agent-TCP连接分析

来源:互联网 发布:电脑装mac os 编辑:程序博客网 时间:2024/06/01 18:07

核心的代码入口都在DefaultAgent的构造方法中,所以从此方法入口。


主要是createTcpDataSender方法,在此方法中首先创建PinpointClientFactory。


而在createPinpointClientFactory方法中,就是创建netty的实现,注册监听的事件。


而在创建PinpointClientFactory的具体代码中,就是创建一个标准的netty实例,增加Handler

而在增加的Handler中核心的代码就是创建DefaultPinpointClientHandler


建立连接时,触发channelConnected事件。在channelConnected方法中连接collector写入数据。其中有一些定时任务,比如执行ping的等。在此方法中。创建handshakeJob和collector握手


Collector接收到数据保存AgentLifeCycle和AgentEvent两个表的数据,(web查询时(拓扑结构),会从AgentLifeCycle中过滤所有状态为Running的数据)。

TCP传输数据还有一部分是,这部分代码有意思,就是线程之间的调用,并非start,首先构建agentInfoSender,让后启动线程,调用Start(在defaultAgent的start方法中)


在agentInfoSender的start中有一个单线程定时执行sumbit函数。然后包装AgentInfoSendRunnable,最终调用的是AgentInfoSendRunnable的run方法(只是调用,并没有start线程),最终调用dataSender的request方法。


TCPDatasender中的executor也是比较有意思的一个线程。其初始化时在创建tcpDataSender时,而AgentInfoSendRunnable线程中的exector方法只是简单的把数据加到队列中。


具体实现可以看一下。

首先是创建一个,然后注册监听的事件。


其创建的代码如下,核心的this.createExecuteThread(executorName)就是此方法。此方法创建一个线程,并且启动线程。而此方法的实现就是调用监听事件的方法。而最终调用的是TCPDataSender的sendPacket方法。而参数对象就是AgentInfoSendRunnable 传递的两个参数构造的RequestMarker对象,然后请求collector。



Pinpoint 
TCP 握手,第一次握手管理Agent的生命周期,写入AgentLifeCycle表和AgentEvent表。
request请求发送agentInfo信息 application_REQUEST包 写入AgentInfo表ApplicationIndex表
当调用具体插件类,进行二进制转换时,当缓存时会request到collector中。


2 0
原创粉丝点击