MQTT---HiveMQ源码详解(十四)Persistence-LocalPersistence
来源:互联网 发布:读懂中国经济数据 上 编辑:程序博客网 时间:2024/03/28 19:54
源博客地址:http://blog.csdn.net/pipinet123
MQTT交流群:221405150
简介
HiveMQ的Persistence提供配置包括File和Memory,以解决不同场景的不同需求,使用者可以自行配置六种信息的PersistenceMode
就代码来讲,又分为LocalPersistence和Cluster/SinglePersistence。LocalPersistence主要是作本地的Persistence;Cluster/SinglePersistence主要是根据用户是否Cluster来决定不同的Persistence业务处理。
本节我们先讲LocalPersistence
类图
每个LocalPersistence都是由对应的Provider根据用户的配置来提供对应的LocalPersistence。
LocalPersistence主要分为这几这么几类QueuedMessage、ClientSessionSubscriptions、IncomingMessageFlow、OutgoingMessageFlow、ClientSession、RetainedMessage、LWT(这个是local的,不需要Cluster),主要持久队列消息、客户订阅、Incoming消息流水、Outgoing消息流水、client session、保留消息。
-
bucket应用
由于这些Persistence的信息,都是跟client强相关的,那么通过bucket,通过clientid与bucket count计算出对应存储的bucket,这样可以数量级减少查找速度。每个Persistence信息的bucket数量都是可以通过配置文件进行自由定义配置
bucket计算
public static int bucket(@NotNull String clientId, int bucketCount) { return Math.abs(clientId.hashCode() % bucketCount); }
PersistenceExecutor
由于持久化的处理也都是通过全部异步处理,类似于CallbackExecutor,Persistence的任务也都是通过统一的Executor进行调度,以达到提高效率,减少没必要的cpu竞争以及线程泛滥的问题。
- MQTT---HiveMQ源码详解(十四)Persistence-LocalPersistence
- MQTT---HiveMQ源码详解(十五)Persistence-Cluster/Single
- MQTT---HiveMQ源码详解(一)概览
- MQTT---HiveMQ源码详解(三)配置加载
- MQTT---HiveMQ源码详解(四)插件加载
- MQTT---HiveMQ源码详解(八)Netty-WebSocket
- MQTT---HiveMQ源码详解(九)Netty-Codec
- MQTT---HiveMQ源码详解(十)Netty-Statistics
- MQTT---HiveMQ源码详解(十一)Netty-Throttling
- MQTT---HiveMQ源码详解(十六)TopicTree
- MQTT---HiveMQ源码详解(二)结构与启动
- MQTT---HiveMQ源码详解(五)Netty-启动与Listeners加载
- MQTT---HiveMQ源码详解(外传)为什么使用Xodus
- MQTT---HiveMQ源码详解(六)Netty-Handlers总览
- MQTT---HiveMQ源码详解(七)Netty-SSL/NoSSL
- MQTT---HiveMQ源码详解(十八)Cluster-kryo与Serializer
- MQTT---HiveMQ源码详解(十九)Cluster-Request/Response
- MQTT---HiveMQ源码详解(二十)Cluster-Replicate/VectorClock
- 最小公倍数
- 树的遍历
- 面试笔记2
- A+B for Input-Output Practice (V)
- MapReduceOnYarn(iMapReduce在Yarn执行的流程分享)
- MQTT---HiveMQ源码详解(十四)Persistence-LocalPersistence
- nodejs + redis/mysql 连接池问题
- leetcode--169. Majority Element
- Mysql 服务无法启动 服务没有报告任何错误
- RPG开发日记
- Add Two Numbers
- Nanopi 2,装机开始到第一个实验,串口通信
- 10023---Linux下which、whereis、locate、find命令的区别
- 多线程_多线程总结