涉及三个关键类:
FastLeaderElection 、
QuorumCnxManager、
FastLeaderElection.
Messenger
QuorumCnxManager
维护一个接收队列和多个发送队列(跟每个节点一个),并维护网络通讯和收发队列的消息同步
ArrayBlockingQueue<Message>
recvQueue
ConcurrentHashMap<Long, ArrayBlockingQueue<ByteBuffer>>
queueSendMap
;
FastLeaderElection
类似地,维护一个接收队列和多个发送队列(跟每个节点一个),FastLeaderElection对象不直接维护网络通讯,网络通讯的细节交给QuorumCnxManager处理
LinkedBlockingQueue<ToSend>
sendqueue
;
LinkedBlockingQueue<Notification>
recvqueue
;
Messenger
Messanger类封装了QuorumCnxManager和FastLeaderElection的各自队列之间消息收发的两个线程:
WorkerReceiver、
WorkerSender
Messenger.WorkerReceiver:负责把消息从 QuorumCnxManager的recvQueue转移到FastLeaderElection的recvqueue,必要时直接把消息送到发送队列sendqueue
Messenger.WorkerSender:负责把消息从FastLeaderElection的sendqueue中取出来,交给QuorumCnxManager处理,由QuorumCnxManager来丢到内部的queueSendMap,并实现真正的网络发送