本项目开源免费,欢迎交流学习、贡献代码。
MqttWk
- QQ群号:225991747
开发指南
技术体系
- 使用 netty 实现通信及协议解析
- 使用 nutzboot 提供依赖注入及属性配置
- 使用 redis 实现消息缓存,集群
- 使用 kafka 实现消息转发(可选)
项目结构
MqttWk
├── mqtt-auth -- MQTT服务连接时用户名和密码认证
├── mqtt-broker -- MQTT服务器功能的核心实现
├── mqtt-common -- 公共类及其他模块使用的服务接口及对象
├── mqtt-store -- MQTT服务器会话信息(redis缓存及kafka加载)
├── mqtt-client -- MQTT客户端示例代码(配置文件修改数据库连接启动之)
├── mqtt-zoo -- 教程文档或文件
├── mqtt-test-kafka -- kafka消费者接收消息
├── mqtt-test-websocket -- websocket通信测试示例
功能说明
- 参考MQTT3.1.1规范实现
- 完整的QoS服务质量等级实现
- 遗嘱消息, 保留消息及消息分发重试
- 心跳机制
- MQTT连接认证(可选择是否开启)
- SSL方式连接(可选择是否开启)
- 主题过滤(支持单主题订阅如
test_topic
/mqtt/test
--不能以/结尾, 通配符订阅#
/mqtt/#
--以#结尾) - Websocket支持(可选择是否开启)
- 集群功能(可选择是否开启)
- Kafka消息转发功能(可选择是否开启)
- 启动后查看统计数据
http://127.0.0.1:8922/open/api/mqttwk/info
快速开始
- JDK1.8
- 项目根目录执行
mvn install
- mqtt-broker 下执行
mvn clean package nutzboot:shade
进行打包 - 运行并加载jar内部yaml配置文件
java -jar mqtt-broker-xxx.jar -Dnutz.profiles.active=prod
[此时加载application-prod.yaml配置文件] - 部署并加载指定文件夹下yaml配置文件
nohup java -Dnutz.boot.configure.yaml.dir=/data -jar mqtt-broker-xxx.jar >/dev/null 2>&1 &
- 打开mqtt-spy客户端, 填写相应配置下载
- 连接端口: 8885, websocket 端口: 9995 websocket
- 连接使用的用户名: demo
- 连接使用的密码: 8F3B8DE2FDC8BD3D792BE77EAC412010971765E5BDD6C499ADCEE840CE441BDEF17E30684BD95CA708F55022222CC6161D0D23C2DFCB12F8AC998F59E7213393
- 连接使用的证书在
mqtt-zoo
\keystore\server.cer
集群使用
- 多机环境集群:
mqttwk:
broker:
cluster-on: true
kafka:
# 是否启用kafka消息转发
broker-enabled: false
bootstrap:
servers: 192.168.1.101:9092,192.168.1.102:9093
redis:
mode: cluster
nodes: 192.168.1.103:16379,192.168.1.104:26379,192.168.1.103:36379
- 单机环境集群:
mqttwk:
broker:
cluster-on: true
kafka:
# 是否启用kafka消息转发
broker-enabled: false
bootstrap:
servers: 192.168.1.101:9092,192.168.1.102:9093
redis:
mode: normal
host: 127.0.0.1
port: 6379
自定义 - 连接认证
- 默认只是简单使用对用户名进行RSA密钥对加密生成密码, 连接认证时对密码进行解密和相应用户名进行匹配认证
- 使用中如果需要实现连接数据库或其他方式进行连接认证, 只需要重写
mqtt-auth
模块下的相应方法即可
自定义 - 服务端证书
- 服务端证书存储在
mqtt-broker
的resources/keystore/server.pfx
- 用户可以制作自己的证书, 但存储位置和文件名必须使用上述描述的位置及文件名
生产环境部署
- 多机环境集群
- 负载均衡: 富人用 L4 Switch,穷人用 Linux HAProxy
示例截图
参考项目
如果您觉得还不错请在右上角点一下 star,帮忙转发,谢谢 🙏🙏🙏 大家的支持是开源最大动力