MQTT---HiveMQ源码详解(十六)TopicTree

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


MQTT交流群:221405150


功能

  • 启动时,读取持久化的信息,构建出订阅树
  • 根据可订阅/取消订阅/读取订阅(包括计算出QoS)

类图

  • 既然是一棵树,那么肯定是由一堆Node组成的,TopicTreeNode持有当前的topic的segment,通配符订阅者信息(包含订阅者、订阅的QoS、是否共享订阅、以及共享订阅组信息)。
  • 每个节点都可以提供订阅、取消订阅、获得订阅者信息、以及一些订阅树节点的数据的增删改查操作。
  • TopicTree实现类持有了node的根结点,与每个节点一致提供对应订阅树的操作。
  • Persistence相关的处理与支持的业务基本上与上节讲解一致,此处就不多作赘述了。
  • TopicTreeBootstrap在broker启动时根据cluster中client session、client session subscriptions、shared subscription来在内存中构建出这一棵树,以便在后续使用时,能够在内存中实时获得到同步的内存订阅树。

订阅树是在每种类型的mqtt broker中几乎都会存在的,订阅树的问题属于优化问题,只有针对符合的场景才能发挥其结构、存储、设计的巧妙。

时间: 2024-07-30 15:42:52

MQTT---HiveMQ源码详解(十六)TopicTree的相关文章

MQTT---HiveMQ源码详解(十)Netty-Statistics

HiveMQ中的内置的统计非常之多,多到可怕,几乎你能想到的统计hivemq都已经帮你想全了:同时第三方plugin还可以定义属于自己的统计. 它的实现采用了Metric框架实现统计.度量.收集的数据可以通过多种数据报告接口,这样可以监控broker运行中的各种数据来监控broker. 所谓统计无外乎就是采集埋点.输出报告 采集埋点 类图 通过StatisticsInitializer实现handlerAdded方法,为pipeline中添加GlobalTrafficCounter(流量计数器)

MQTT---HiveMQ源码详解(十二)Netty-MQTT消息、事件处理(流程)

简介 前面这些章节,讲的基本上都是属于netty对MQTT周边的一些处理,由于MQTT协议总共目前可用的消息类型有14个,如果再加上对应的事件处理加载一起那就估计大概有14*3个handler,如果每个来讲一遍,难免有些枯燥,而且知识点会很分散,思考再三,想把整体的MQTT消息以及对应的事件处理作为一节来介绍,我们只讲它整体的实现思路.处理流程即可,这样对需要自己写broker的朋友的帮助应该是非常大的,这也符合最初写此系列博客的初衷. 热身 一.Callback 1.分类 HiveMQ的Cal

MQTT---HiveMQ源码详解(十四)Persistence-LocalPersistence

简介 HiveMQ的Persistence提供配置包括File和Memory,以解决不同场景的不同需求,使用者可以自行配置六种信息的PersistenceMode 就代码来讲,又分为LocalPersistence和Cluster/SinglePersistence.LocalPersistence主要是作本地的Persistence:Cluster/SinglePersistence主要是根据用户是否Cluster来决定不同的Persistence业务处理. 本节我们先讲LocalPersis

MQTT---HiveMQ源码详解(十九)Cluster-Request/Response

源博客地址:http://blog.csdn.net/pipinet123 MQTT交流群:221405150 既然是通讯,底层的通讯协议由JGroup负责,那么上层类似于web项目,需要定义Request/Response. Request Request非常多,基本上数量与Serializer差不多,但特征非常明显. Query Request,向其他持有数据的node请求自己需要的数据 Replicate Request, 向其他node分发.备份数据. Node Information

Android编程之Fragment动画加载方法源码详解

上次谈到了Fragment动画加载的异常问题,今天再聊聊它的动画加载loadAnimation的实现源代码: Animation loadAnimation(Fragment fragment, int transit, boolean enter, int transitionStyle) { 接下来具体看一下里面的源码部分,我将一部分一部分的讲解,首先是: Animation animObj = fragment.onCreateAnimation(transit, enter, fragm

Java concurrent AQS 源码详解

一.引言 AQS(同步阻塞队列)是concurrent包下锁机制实现的基础,相信大家在读完本篇博客后会对AQS框架有一个较为清晰的认识 这篇博客主要针对AbstractQueuedSynchronizer的源码进行分析,大致分为三个部分: 静态内部类Node的解析 重要常量以及字段的解析 重要方法的源码详解. 所有的分析仅基于个人的理解,若有不正之处,请谅解和批评指正,不胜感激!!! 二.Node解析 AQS在内部维护了一个同步阻塞队列,下面简称sync queue,该队列的元素即静态内部类No

深入Java基础(四)--哈希表(1)HashMap应用及源码详解

继续深入Java基础系列.今天是研究下哈希表,毕竟我们很多应用层的查找存储框架都是哈希作为它的根数据结构进行封装的嘛. 本系列: (1)深入Java基础(一)--基本数据类型及其包装类 (2)深入Java基础(二)--字符串家族 (3)深入Java基础(三)–集合(1)集合父类以及父接口源码及理解 (4)深入Java基础(三)–集合(2)ArrayList和其继承树源码解析以及其注意事项 文章结构:(1)哈希概述及HashMap应用:(2)HashMap源码分析:(3)再次总结关键点 一.哈希概

Spring IOC源码详解之容器依赖注入

Spring IOC源码详解之容器依赖注入 上一篇博客中介绍了IOC容器的初始化,通过源码分析大致了解了IOC容器初始化的一些知识,先简单回顾下上篇的内容 载入bean定义文件的过程,这个过程是通过BeanDefinitionReader来完成的,其中通过 loadBeanDefinition()来对定义文件进行解析和根据Spring定义的bean规则进行处理 - 事实上和Spring定义的bean规则相关的处理是在BeanDefinitionParserDelegate中完成的,完成这个处理需

Spring IOC源码详解之容器初始化

Spring IOC源码详解之容器初始化 上篇介绍了Spring IOC的大致体系类图,先来看一段简短的代码,使用IOC比较典型的代码 ClassPathResource res = new ClassPathResource("beans.xml"); DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader = new XmlBeanDe