【Zookeeper】源碼分析之請求處理鏈(一)


一、前言

  前面已經分析了Watcher機制的主要代碼,現在接着分析Zookeeper中的請求處理鏈,其是Zookeeper的主要特點之一。

二、總體框圖

  對於請求處理鏈而言,所有請求處理器的父接口為RequestProcessor,其框架圖如下

  

  說明:

  AckRequestProcessor,將前一階段的請求作為ACK轉發給Leader。

  CommitProcessor,將到來的請求與本地提交的請求進行匹配,這是因為改變系統狀態的本地請求的返回結果是到來的請求。

  FinalRequestProcessor,通常是請求處理鏈的最后一個處理器。

  FollowerRequestProcessor,將修改了系統狀態的請求轉發給Leader。

  ObserverRequestProcessor,同FollowerRequestProcessor一樣,將修改了系統狀態的請求轉發給Leader。

  PrepRequestProcessor,通常是請求處理鏈的第一個處理器。

  ProposalRequestProcessor,將請求轉發給AckRequestProcessor和SyncRequestProcessor。

  ReadOnlyRequestProcessor,是ReadOnlyZooKeeperServer請求處理鏈的第一個處理器,將只讀請求傳遞給下個處理器,拋棄改變狀態的請求。

  SendAckRequestProcessor,發送ACK請求的處理器。

  SyncRequestProcessor,發送Sync請求的處理器。

  ToBeAppliedRequestProcessor,維護toBeApplied列表,下個處理器必須是FinalRequestProcessor並且FinalRequestProcessor必須同步處理請求。

  UnimplementedRequestProcessor,用於管理未知請求。

三、RequestProcessor源碼分析

  RequestProcessor是所有處理器的父接口,其定義了處理器的處理方法,其源碼如下 

public interface RequestProcessor {
    @SuppressWarnings("serial")
    public static class RequestProcessorException extends Exception {
        public RequestProcessorException(String msg, Throwable t) {
            super(msg, t);
        }
    }

    void processRequest(Request request) throws RequestProcessorException;

    void shutdown();
}

  說明:RequestProcessor源碼非常簡單,內部類RequestProcessorException,用來表示處理過程中的出現的異常,而processRequest和shutdown方法則是核心方法,是子類必須要實現的方法,處理的主要邏輯在processRequest中,通過processRequest方法可以將請求傳遞到下個處理器,通常是單線程的。而shutdown表示關閉處理器,其意味着該處理器要關閉和其他處理器的連接。

四、總結

  本篇博文主要學習了RequestProcessor的相關源碼,其定義了處理器的處理邏輯,也分析其子類的大體介紹,之后會詳細分析各個處理器的源碼,謝謝各位園友的觀看~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM