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