帶着問題擼源碼系列-zookeeper-不同的RequestProcessor之間是什麼關係,如何協調?

問題

帶着問題擼源碼系列-zookeeper-不同的RequestProcessor之間是什麼關係,如何協調?

參考

思考了頗久實在沒找到突破的方法,只好找網上文章找突破口了:
處理寫請求過程

讀源碼

在這裏配置每個RequestProcessor的關係,先調用哪個再調用哪個:
org.apache.zookeeper.server.quorum.FollowerZooKeeperServer#setupRequestProcessors
可以看到是
在這裏插入圖片描述
可以看到,第一個是FollowerRequestProcessor,緊接着是commitProcessor,最後是FinalRequestProcessor

這個就有點像責任鏈模式,讓每個模塊都有處理事情的機會,GOT IT!
在這裏插入圖片描述

每個RequestProcessor都會在調用過程中,調用下一個Processor,讓下一個Processor完成他的任務,如在FollowerRequestProcessor中:
在這裏插入圖片描述

斷點調試

我們在FollowerRequestProcessor中打斷點條件斷點:request.type!=11,同時在下一個Processor:commitProcessor中也打斷點,然後我們來發一個讀請求:ls /

可以看到確實是先在
FollowerRequestProcessor停住了
然後在commitProcessor停住了

回答問題

setUp的時候,指定了每個Processor的下一個Processor是誰,然後在每個Processor處理的過程中會調用自己的nextProcessor來處理,以一個責任鏈的模式將Request傳遞。
具體到Follower的責任鏈,是 FollowerRequestProcessor -》 commitProcessor -》 FinalRequestProcesoor

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章