MQTT---HiveMQ源代碼具體解釋(十四)Persistence-LocalPersistence

源博客地址:http://blog.csdn.net/pipinet123java


MQTT交流羣:221405150


簡單介紹

HiveMQ的Persistence提供配置包含File和Memory,以解決不一樣場景的不一樣需求,使用者可以自行配置六種信息的PersistenceModemarkdown

就代碼來說。又分爲LocalPersistence和Cluster/SinglePersistence。LocalPersistence主要是做本地的Persistence;Cluster/SinglePersistence主要是依據用戶是否Cluster來決定不一樣的Persistence業務處理。session

本節咱們先講LocalPersistence異步


類圖

LocalPersistence

  • 每個LocalPersistence都是由相應的Provider依據用戶的配置來提供相應的LocalPersistence。ide

  • LocalPersistence主要分爲這幾這麼幾類QueuedMessage、ClientSessionSubscriptions、IncomingMessageFlow、OutgoingMessageFlow、ClientSession、RetainedMessage、LWT(這個是local的,不需要Cluster),主要持久隊列消息、客戶訂閱、Incoming消息流水、Outgoing消息流水、client session、保留消息。post

  • -

bucket應用

由於這些Persistence的信息。都是跟client強相關的,那麼經過bucket,經過clientid與bucket count計算出相應存儲的bucket,這樣可以數量級下降查找速度。每個Persistence信息的bucket數量都是可以經過配置文件進行自由定義配置spa

bucket計算

public static int bucket(@NotNull String clientId, int bucketCount) {
        return Math.abs(clientId.hashCode() % bucketCount);
    }

PersistenceExecutor

由於持久化的處理也都是經過全部異步處理。類似於CallbackExecutor,Persistence的任務也都是經過統一的Executor進行調度,以達到提升效率,下降不是必需的cpu競爭以及線程氾濫的問題。.net

相關文章
相關標籤/搜索