您的位置:首页 > 理论基础 > 计算机网络

pinpoint Agent-TCP连接分析

2017-01-19 18:09 375 查看
核心的代码入口都在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中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  pinpoint tcp