Zookeeper事件机制源码分析
2019-04-19 14:09:59 0 举报
Zookeeper事件机制源码分析
作者其他创作
大纲/内容
PrepRequestProcessor
Zookeeper(exists方法...)
添加信息到队列queuedRequests.add(...)
从绑定监听事件开始exists(.....)
zks.processPacket(...)
FinalRequestProcessor
cnxn.start()
找对应线程的run()
run()
nextProcessor.processRequest(...)
处理数据包
dataTree.statNode(...)
firstProcessor.processRequest(...)
ClientCnxn
WatchManager
sendPkt(...)
NettyServerCnxn
代码关键点(触发事件exists)case OpCode.exists:
receiveMessage(...)
dataWatches.addWatch(...)
zks.getZKDatabase().statNode(...)
从队列中取消息queuedRequests.add(...)
内部类
静态内部类
ZooKeeper
序列化(requestHeader/request)发送给服务器
ZKDatabase
SendThread
添加到队列中submittedRequests.add(...)
ClientCnxnSocketNetty
启动两个线程sendThread.start() eventThread.start()
new packet()封装数据把packet对象添加到队列outgoingQueue.add(packet)进行传递
ZooKeeperServer
客户端
Packet
由于类PrepRequestProcessor继承了线程(ZooKeeperCriticalThread)那么在类中一定有个run方法处理该类的队列消息
服务端
DataTree
submitRequest(...)
cnxn.sendResponse(...)
pRequest(...)
Zookeeper构造
ServerCnxn
sendResponse(...)
封装数据包queuePacket(...)
submittedRequests.take()拿到消息
doWrite(...)
cnxn.sendResponse
submitRequest(...)
队列中取出数据outgoingQueue.poll(...)
clientCnxnSocket.doTransport(...)
构造方法中有一句代码new ClientCnxn()初始化后启动线程
p.createBB(...)
cnxn.submitRequest()
SyncRequestProcessor
收藏
0 条评论
回复 删除
下一页