首页 技术 正文
技术 2022年11月6日
0 收藏 698 点赞 324 浏览 1308 个字

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


MQTT交流群:221405150


面向群体

  • 想自己实现MQTT Broker的朋友
  • 对现有开源的MQTT Broker或多或少有些不惬意的朋友

简介

HiveMQ是企业级MQTT Broker,提供高性能、高可用、高扩展、高安全性的企业级服务。

它是纯Java实现的。

官网地址:http://www.hivemq.com

基于它如上的描写叙述。所以兴许我们就是基于它的高性能、高可用、高扩展、高安全性这几个特点来分析它的源代码。

注意:本篇源代码都是基于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混淆过的源代码反编译了
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,993
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,507
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,350
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,135
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,768
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,845