Skip to content

MQTT协议的Broker(服务器)端实现,单机最低可支持2w+并发连接数,支持SSL加密及WebSocket连接。与Eclipse的Mosquitto功能类似,但拥有更高的并发承受能力。

License

Notifications You must be signed in to change notification settings

zhangjun1998/z-mqtt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

z-mqtt

目录

一、简介

z-mqtt是一款轻量级的MQTT Broker,作为MQTT发布/订阅的核心,接收Publisher的消息,并发送给相应的Subscriber。总的来说其作用与Eclipse的Mosquitto相似,但是z-mqtt可以承载更高的并发连接数,并且支持横向扩展。

二、项目结构

z-mqtt
  ├─z-mqtt-broker -- broker核心功能实现
  ├─z-mqtt-common -- 通用模块及接口
  └─z-mqtt-store -- 主题、订阅、消息等存储

三、技术栈

  • SpringBoot
  • Netty
  • Redis(可选)
  • RocketMQ(可选)

四、功能特性

  • 支持MQTT协议v3.1及v3.1.1版本,暂不支持v5.0版本
  • 支持0、1、2三个等级的Qos
  • 支持遗嘱、Retain消息
  • 支持心跳机制
  • 支持客户端认证
  • 支持SSL加密
  • 支持WebSocket连接
  • 支持使用通配符(+、#)进行主题过滤,完全实现v3.1.1版本通配符相关规范
  • 支持接入不同类型的MQ,如RocketMQ、RabbitMQ、Kafka等
  • 支持大量连接断开时进行邮件、短信告警
  • 支持集群横向扩展

注:最后三个功能点的前两点已经基本完成设计,目前没有时间实现,应该会在下个版本更新时加上。最后一个集群扩展功能也设计了几种方案,但是没有达到我的理想方案,会放在下文问题中。

五、性能相关

  • 单机环境下最少可以支持20000并发连接,上限暂时没有进行测试。

  • 内存占用较低,暂未发现内存泄露问题

六、问题

关于集群方面的方案还在考虑,目前想到的有以下几个方案,但不符合心理预期:

  1. 不引入中间件,在broker之间进行数据同步
  2. 使用Redis进行数据共享,无需broker互相通信
  3. 使用MQ进行广播

以上三个方案我倾向的是方案一,因为无需引入第三方工具,毕竟是作为一款轻量级的MQTT Broker。

七、致谢

八、关于

2020届本科通信工程毕业,大学自学计算机然后如愿的成为了一个不知名的Java开发,喜欢读书,喜欢开源,想找时间做一套定制化的智能家居,一起加油吧。

有兴趣的可以看下我的另一个项目,用于实现内网穿透:zrp

Email:zhangjun_java@163.com

QQ:1097653004

About

MQTT协议的Broker(服务器)端实现,单机最低可支持2w+并发连接数,支持SSL加密及WebSocket连接。与Eclipse的Mosquitto功能类似,但拥有更高的并发承受能力。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages