簡介
HiveMQ的Persistence提供配置包括File和Memory,以解決不同場景的不同需求再姑,使用者可以自行配置六種信息的PersistenceMode
就代碼來講淫僻,又分為LocalPersistence和Cluster/SinglePersistence此虑。LocalPersistence主要是作本地的Persistence;Cluster/SinglePersistence主要是根據(jù)用戶是否Cluster來決定不同的Persistence業(yè)務處理听盖。
本節(jié)我們先講LocalPersistence
類圖
每個LocalPersistence都是由對應的Provider根據(jù)用戶的配置來提供對應的LocalPersistence。
LocalPersistence主要分為這幾這么幾類QueuedMessage裂七、ClientSessionSubscriptions皆看、IncomingMessageFlow、OutgoingMessageFlow碍讯、ClientSession悬蔽、RetainedMessage、LWT(這個是local的捉兴,不需要Cluster),主要持久隊列消息蝎困、客戶訂閱录语、Incoming消息流水、Outgoing消息流水禾乘、client session澎埠、保留消息。
bucket應用
由于這些Persistence的信息始藕,都是跟client強相關的蒲稳,那么通過bucket,通過clientid與bucket count計算出對應存儲的bucket伍派,這樣可以數(shù)量級減少查找速度江耀。每個Persistence信息的bucket數(shù)量都是可以通過配置文件進行自由定義配置
bucket計算
public static int bucket(@NotNull String clientId, int bucketCount) {
return Math.abs(clientId.hashCode() % bucketCount);
}
PersistenceExecutor
由于持久化的處理也都是通過全部異步處理,類似于CallbackExecutor,Persistence的任務也都是通過統(tǒng)一的Executor進行調度诉植,以達到提高效率祥国,減少沒必要的cpu競爭以及線程泛濫的問題。