MessageTree被Period分發到不一樣的PeriodTask異步
不一樣的PeriodTask調用對應的Analyzer處理MessageTree,上面的序列圖,是以DumpAnalyzer爲例.net
DumpAnalyzer調用抽象父類AbstractMessageAnalyzer中的analyze方法,處理messageTree,該方法內容調用抽象方法process,每個Analyzer的process都有具體的Analyzer作不一樣的實現。DumpAnalyzer按照本身的業務邏輯實現process方法。線程
該DumpAnalyzer的process方法調用LocalMessageBucketManager的storeMessage方法,將MessageTree落盤。具體的落盤分兩步,以下:blog
第一步: 一、將MessageTree分發到隊列中,啓動20個MessageZip的異步線程,作壓縮處理,將多個MessageTree壓縮進一個MessageBlock,若是MessageBlock的大小>=64k,就將該MessageBlock插入到m_messageBlocks隊列中,交個BlockDumper和LogviewUploader處理。隊列
第二步: BlockDumper將m_messageBlocks隊列中的block逐個寫入磁盤,具體寫入邏輯,參考 MessageTree3——數據文件(MessageTree)讀寫磁盤詳細邏輯圖片
LogviewUploader將不在有效期內的全部文件給刪了。ip