MQTT---HiveMQ源代码具体解释(一)概览
源博客地址:http://blog.csdn.net/pipinet123
MQTT交流群:221405150
面向群体
- 想自己实现MQTT Broker的朋友
- 对现有开源的MQTT Broker或多或少有些不惬意的朋友
简介
HiveMQ是企业级MQTT Broker,提供高性能、高可用、高扩展、高安全性的企业级服务。
它是纯Java实现的。
基于它如上的描写叙述。所以兴许我们就是基于它的高性能、高可用、高扩展、高安全性这几个特点来分析它的源代码。
注意:本篇源代码都是基于HiveMQ 3.1.2版本号源代码解说。
拓扑图
Single
- 多个client直接与Broker连接。
Cluster
- 多个client与Load Balancer连接,由Load Balancer做负载均衡,将连接分发到各个Broker。
- 多个Broker组成Cluster,由JGroup进行集群通讯。
- 多个Broker由一致性hash环虚节点,进行集群中数据的主主备份,以达到高可用。
- HiveMQ提供多种集群Discovery来达到不同组网场景中的集群发现。
架构图
- Handlers由实现Netty ChannelHandlerAdapter。处理SSL;处理MQTT协议的codec;处理监控数据收集;处理流量限制;扩展点回调触发等client长链接。
- SPI是HiveMQ扩展出来为做HiveMQ Broker端二次开发,提供各种Callback、 Cache、Scheduler、Authentication、Authorization、Configuration等等扩展点;还提供了各种异步/同步的接口Service。
以便开发者基于HiveMQ开发属于自己的业务;
- Plugins是基于SPI提供出来的扩展点。依照HiveMQ的Plugin开发要求,注冊属于客户自己的Plugin,HiveMQ官方也给我们提供出来了一些基础插件及各种插件的演示样例。
- ClusterServices是处理集群连接、数据备份、数据交换、节点状态、一致性has虚拟节点等处理的一堆Service
- Persistences是处理消息的存储、Cluster节点间的数据存储/同步。
- LocalPersistences是处理消息在当前节点的信息存储。
开源框架使用
- 使用Guice做DI
- 使用Netty 4做网络框架
- 使用JGroups做Cluster Node之间的集群通讯
- 使用Exodus做Broker信息文件持久化存储
- 使用Dropwizard Metrics做Broker的统计、监控
- 使用Kryo做序列化/反序列化
- 使用Jetty做Broker端servlet容器
- 使用Resteasy做Broker端restfull框架
- 使用Quartz/做Broker端任务的调度
其它另一些使用的框架不一一列举
Why?
为什么研究MQTT Broker
- 想自己实现手机app推送
- MQTT协议轻量/QoS保证
为什么选择HiveMQ
- 它支持Plugin开发
- 它支持Cluster
- 它的代码相当严谨,包含性能考虑/内存考虑
源代码从哪来的?
- 博主花了一年的业余时间,将hivemq混淆过的源代码反编译了
MQTT---HiveMQ源代码具体解释(一)概览的更多相关文章
- Spring IOC源代码具体解释之容器初始化
Spring IOC源代码具体解释之容器初始化 上篇介绍了Spring IOC的大致体系类图,先来看一段简短的代码,使用IOC比較典型的代码 ClassPathResource res = new C ...
- Spring IOC源代码具体解释之容器依赖注入
Spring IOC源代码具体解释之容器依赖注入 上一篇博客中介绍了IOC容器的初始化.通过源代码分析大致了解了IOC容器初始化的一些知识.先简单回想下上篇的内容 加载bean定义文件的过程.这个过程 ...
- MQTT---HiveMQ源代码具体解释(四)插件载入
源博客地址:http://blog.csdn.net/pipinet123 MQTT交流群:221405150 实现功能 将全部放在plugins文件夹下的全部符合plugin编写规范的plugin ...
- MQTT---HiveMQ源代码具体解释(十八)Cluster-kryo与Serializer
源博客地址:http://blog.csdn.net/pipinet123 MQTT交流群:221405150 既然是Cluster,node之间肯定是须要交互的,那么肯定是须要序列化和反序列化.Hi ...
- MQTT---HiveMQ源代码具体解释(七)Netty-SSL/NoSSL
源博客地址:http://blog.csdn.net/pipinet123 MQTT交流群:221405150 实现功能 依据用户配置的不同的Listener(TcpListener.TlsTcpLi ...
- Spring IOC源代码具体解释之整体结构
Spring ICO具体解释之整体结构 IOC介绍 IOC, spring的核心.贯穿Spring始终.直观的来说.就是由spring来负责控制对象的生命周期和对象间的关系,将对象之间的关系抽象出来. ...
- MQTT---HiveMQ源代码具体解释(十四)Persistence-LocalPersistence
源博客地址:http://blog.csdn.net/pipinet123 MQTT交流群:221405150 简单介绍 HiveMQ的Persistence提供配置包含File和Memory,以解决 ...
- MQTT---HiveMQ源代码具体解释(八)Netty-WebSocket
源博客地址:http://blog.csdn.net/pipinet123 MQTT交流群:221405150 基于netty实现Webscoket相对来说就是相当简单,所以本讲中就不搞太复杂的了,给 ...
- dlmalloc 2.8.6 源代码具体解释(5)
本文章由vector03原创, 转载请注明出处. 邮箱地址: mmzsmm@163.com, 欢迎来信讨论. 3. 分配及实现 本章节介绍dlmalloc的分配算法和实现.由于存在多mspac ...
随机推荐
- msxml3.dll 错误 '800c0005' 系统错误: -2146697211。
asp网站 因为这个问题,困扰自己好多次,还重装过两次服务器系统,非常的麻烦,这次终于找到了问题所在,记录下来,方便以后查看. 服务器症状: 1.服务器上的IE浏览器不能访问外网: 2.set htt ...
- Java编程思想读书笔记_第8章
覆盖私有方法 class Father { private void f() { System.out.println("Father::f()"); } public stati ...
- HP M177打印机驱动安装问题与解决
问题描述 采购HP Color LaserJet Pro MFP M177 PCLmS一台,采用局域网WIFI网络与办公室各电脑连接.安装打印机自带光盘驱动,发现有些电脑安装驱动失败,提示“出现严重错 ...
- 在linux下运行mongodb
一>下载 1.去mongodb官网下拉框中找到 linux =>RHEL 6 => Package Manager: 2.Instructions for installing wi ...
- Reuse a SSL socket
It's possible to reuse a SSL socket after proper cleanup. See SSL Socket free and shutdown on stacko ...
- java对于07excel的读、改、写、并触发计算
InputStream is = null; try { is = new FileInputStream(filePath); } catch (FileNotFoundException e1) ...
- 【sqli-labs】 less65 GET -Challenge -Blind -130 queries allowed -Variation4 (GET型 挑战 盲注 只允许130次查询 变化4)
双引号括号闭合 http://192.168.136.128/sqli-labs-master/Less-65/?id=1")%23
- 搭建linux环境:如何在vmware安装linux虚拟机??
本来不想再整一遍的,奈何分布式压测呀,呀呀呀呀呀呀 1.安装linux虚机 (1)在桌面上双击VMware Workstation图标后启动虚拟机,鼠标单击文件,选择新的虚拟机: (2)单击“next ...
- Tomcat 使用redis实现session共享
准备工作: 1.安装nginx 环境搭建参考:https://blog.csdn.net/fd2025/article/details/79878326 nginx.conf的编辑: 2.同一台机器配 ...
- 面向对象程序设计--Java语言第一周编程题:分数
分数 题目内容: 设计一个表示分数的类Fraction.这个类用两个int类型的变量分别表示分子和分母. 这个类的构造函数是: Fraction(int a, int b) 构造一个a/b的分数. 这 ...