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 ...
随机推荐
- Android ViewPager+HorizontalScrollView实现标题栏滑动(腾讯新闻)
1) ViewPager提供了左右滑动切换页面的方法,但是它所提供的标题只是无语,估计没有真正的项目会照搬拿过来;并且它只能一页一页滑,我想直接查看最后一页要滑半天; 2) 看了腾讯新闻客户端感觉体验 ...
- Selenium基于Python web自动化基础二 -- 免登录、等待及unittest单元测试框架
一.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...
- Python中深拷贝与浅拷贝的区别
转自:http://blog.csdn.net/u014745194/article/details/70271868 定义: 在Python中对象的赋值其实就是对象的引用.当创建一个对象,把它赋值给 ...
- [Windows Server 2008] IP安全策略限制端口方法
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:限制143 ...
- 【译】x86程序员手册28-7.7任务地址空间
7.7 Task Address Space 任务地址空间 The LDT selector and PDBR fields of the TSS give software systems desi ...
- oracle数据库过期
本文转载自http://soft.chinabyte.com/database/6/12320006.shtml[来源:比特网 作者:悠虎] 由于Oracle11G的新特性所致,经常会遇到使用sqlp ...
- python利用requests统计1个接口的响应时间
参照 https://www.cnblogs.com/yoyoketang/p/8035428.html requests统计接口的响应时间有2种方式 r.elapsed.total_seconds( ...
- chr()返回值是当前整数对应的 ASCII 字符。
#chr() 用一个范围在 range(256)内的(就是0-255)整数作参数,返回一个对应的字符.#返回值是当前整数对应的 ASCII 字符.1 import random input_m =10 ...
- Mybatis与Spring整合方法
实现mybatis与spring进行整合,通过spring管理SqlSessionFactory.mapper接口. tips:mybatis官方提供与mybatis与spring整合jar包. 一. ...
- java中的数学函数Math方法记录
1,三角函数与属性Math.sin() -- 返回数字的正弦值Math.cos() -- 返回数字的余弦值Math.tan() -- 返回数字的正切值Math.asin() -- 返回数字的反正弦值M ...