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

相关文章
相关标签/搜索