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 ...
 
随机推荐
- ASP.NET文件操作
			
在开发Web程序时,不但有存储在数据库中和XML文件中的数据形式需要处理,而且还有很多诸如文本.Word文档和图片等格式的文件数据需要处理.尤其是在一些信息管理系统中,文档的处理流程贯穿了整个系统的运 ...
 - php函数的定义和声明
			
1.函数的定义 函数是一个被命名的独立的代码段,它执行特定任务,并可以给调用它的程序返回值. 2.函数的优点 提高程序的重用性 提高程序的可维护性 可以提高软件的开发效率 提高软件的可靠性 控制程序的 ...
 - getBlockTable delete pline
			
AcDbBlockTable *pBlkTab; Acad::ErrorStatus es = acdbHostApplicationServices()->workingDatabase() ...
 - Redis系列(九)--几道面试题
			
这里只是一点面试题,想了解更多,可以查看本人的Redis系列:https://www.cnblogs.com/huigelaile/category/1461895.html 1.Redis和Memc ...
 - ocelot+consul+identity4的使用demo
			
Ocelot网关搭建 搭建core控制台项目 本demo采用2.1版本 命名为APPIGateWay 在Nuget包中添加Ocelot引用 选用8.0.0版本 添加Ocelot.json 文件 内容为 ...
 - react  导航切换
			
<ul class="nav"> <li onClick={() => this.changeFontColor(0)} className={`${0 = ...
 - Object.prototype 原型和原型链
			
Object.prototype 原型和原型链 原型 Javascript中所有的对象都是Object的实例,并继承Object.prototype的属性和方法,有些属性是隐藏的.换句话说,在对象创建 ...
 - 第二章 设计高质量的React组件
			
第二章 设计高质量的React组件 高质量React组件的原则和方法: 划分组件边界的原则: React组件的数据种类: React组件的生命周期. 2.1 易于维护组件的设计要素 1.高内聚:指的是 ...
 - 作业 3-5 switch语句的应用
			
/*输入五级制成绩(A-E),输出相应的百分制成绩(0-100)区间*/ #include<stdio.h> int main(void) { char ch;/*定义一个字符*/ pri ...
 - linux whereis-查找二进制程序、代码等相关文件路径
			
推荐:更多Linux 文件查找和比较 命令关注:linux命令大全 whereis命令用来定位指令的二进制程序.源代码文件和man手册页等相关文件的路径. whereis命令只能用于程序名的搜索,而且 ...