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并发连接,上限暂时没有进行测试。
-
内存占用较低,暂未发现内存泄露问题
关于集群方面的方案还在考虑,目前想到的有以下几个方案,但不符合心理预期:
- 不引入中间件,在broker之间进行数据同步
- 使用Redis进行数据共享,无需broker互相通信
- 使用MQ进行广播
以上三个方案我倾向的是方案一,因为无需引入第三方工具,毕竟是作为一款轻量级的MQTT Broker。
2020届本科通信工程毕业,大学自学计算机然后如愿的成为了一个不知名的Java开发,喜欢读书,喜欢开源,想找时间做一套定制化的智能家居,一起加油吧。
有兴趣的可以看下我的另一个项目,用于实现内网穿透:zrp
Email:zhangjun_java@163.com
QQ:1097653004