本篇內(nèi)容介紹了“zk中選舉Leader時(shí)的網(wǎng)絡(luò)IO QuorumCnxManager是什么意思”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)公司主要從事網(wǎng)頁(yè)設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、響應(yīng)式網(wǎng)站、程序開(kāi)發(fā)、網(wǎng)站優(yōu)化、微網(wǎng)站、小程序制作等,憑借多年來(lái)在互聯(lián)網(wǎng)的打拼,我們?cè)诨ヂ?lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了豐富的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷經(jīng)驗(yàn),集策劃、開(kāi)發(fā)、設(shè)計(jì)、營(yíng)銷、管理等多方位專業(yè)化運(yùn)作于一體。
每臺(tái)服務(wù)啟動(dòng)過(guò)程中,會(huì)啟動(dòng)一個(gè)QuorumCnxManager,負(fù)責(zé)各臺(tái)服務(wù)器之間底層Leader選舉過(guò)程中的網(wǎng)絡(luò)通信
當(dāng)集群中有服務(wù)器服務(wù)中斷時(shí),zk會(huì)重新選舉leader
內(nèi)部類
Message定義消息結(jié)構(gòu) 包含了sid和內(nèi)容ByteBuffer
ByteBuffer buffer;long sid;
InitialMessage
QuorumConnectionReqThread 發(fā)送連接請(qǐng)求類
QuorumConnectionReceiverThread
Listener 端口上的監(jiān)聽(tīng)
SendWorker發(fā)送線程,從發(fā)送隊(duì)列取出消息,發(fā)送給對(duì)應(yīng)sid機(jī)器
一旦發(fā)現(xiàn)針對(duì)當(dāng)前服務(wù)sid的消息隊(duì)列為空,那么要從最近發(fā)送的消息中取出一條再次發(fā)送
為了保證服務(wù)端服務(wù)正常,zk能夠保證重復(fù)消息進(jìn)行正確處理
RecvWorker 接收消息的線程 不斷從網(wǎng)絡(luò)io中讀取數(shù)據(jù)放入接收隊(duì)列
類UML圖
屬性
RECV_CAPACITY | 線程隊(duì)列最大容量 |
SEND_CAPACITY | 發(fā)送容量 |
PACKETMAXSIZE | 包最大1024*512 |
observerCounter | 觀察者個(gè)數(shù) |
QuorumPeer | 集群數(shù) |
mySid | ip地址 |
connectionExecutor | 連接線程池服務(wù)執(zhí)行者 |
authServer | 已驗(yàn)證server |
authLearner | 學(xué)習(xí)者 |
connectionThreadCnt | 處理連接的個(gè)數(shù) |
recvQueue | 接收隊(duì)列 |
方法
初始化連接
public void initiateConnection(final Socket sock, final Long sid) { try { startConnection(sock, sid); } catch (IOException e) { LOG.error("Exception while connecting, id: {}, addr: {}, closing learner connection", new Object[]{sid, sock.getRemoteSocketAddress()}, e); closeSocket(sock); return; } } 接收連接 public void receiveConnection(final Socket sock) { DataInputStream din = null; try { din = new DataInputStream(new BufferedInputStream(sock.getInputStream())); handleConnection(sock, din); } catch (IOException e) { LOG.error("Exception handling connection, addr: {}, closing server connection", sock.getRemoteSocketAddress()); closeSocket(sock); } }
“zk中選舉Leader時(shí)的網(wǎng)絡(luò)IO QuorumCnxManager是什么意思”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!