# z-mqtt
**Repository Path**: zhangjun-1998/z-mqtt
## Basic Information
- **Project Name**: z-mqtt
- **Description**: MQTT协议的Broker端实现,单机最低可支持2w+并发连接数,支持SSL加密及WebSocket连接。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2021-03-11
- **Last Updated**: 2025-02-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 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(可选)
### 四、功能特性
+ [x] 支持MQTT协议v3.1及v3.1.1版本,暂不支持v5.0版本
+ [x] 支持0、1、2三个等级的Qos
+ [x] 支持遗嘱、Retain消息
+ [x] 支持心跳机制
+ [x] 支持客户端认证
+ [x] 支持SSL加密
+ [x] 支持WebSocket连接
+ [x] 支持使用通配符(+、#)进行主题过滤,完全实现v3.1.1版本通配符相关规范
+ [ ] 支持接入不同类型的MQ,如RocketMQ、RabbitMQ、Kafka等
+ [ ] 支持大量连接断开时进行邮件、短信告警
+ [ ] 支持集群横向扩展
注:最后三个功能点的前两点已经基本完成设计,目前没有时间实现,应该会在下个版本更新时加上。最后一个集群扩展功能也设计了几种方案,但是没有达到我的理想方案,会放在下文问题中。
### 五、性能相关
+ 单机环境下最少可以支持20000并发连接,上限暂时没有进行测试。
+ 内存占用较低,暂未发现内存泄露问题
### 六、问题
关于集群方面的方案还在考虑,目前想到的有以下几个方案,但不符合心理预期:
1. 不引入中间件,在broker之间进行数据同步
2. 使用Redis进行数据共享,无需broker互相通信
3. 使用MQ进行广播
以上三个方案我倾向的是方案一,因为无需引入第三方工具,毕竟是作为一款轻量级的MQTT Broker。如果有其它好的方案希望您与我联系,也可以直接提issue。
### 七、致谢
+ [Mr.Wang](https://gitee.com/recallcode)
### 八、关于
我是2020届本科通信工程专业毕业,大学自学计算机然后如愿的成为了一个不知名的Java开发,喜欢读书,喜欢开源,梦想打造一套属于自己的智能家居,一起加油吧。
有兴趣的可以看下我的另一个项目,用于实现内网穿透:[zrp](https://github.com/zhangjun1998/zrp)
Email:zhangjun_java@163.com
QQ:1097653004