java集成低延迟、高性能的 mqtt 物联网集群附源码
基于 t-io 实现的低延迟、高性能的 mqtt 物联网组件。更多使用方式详见: mica-mqtt-example 模块。
使用场景
- 物联网(云端 mqtt broker)
- 物联网(边缘端消息通信)
- 群组类 IM
- 消息推送
- 简单易用的 mqtt 客户端
优势
- 平凡却不单调,简单却不失精彩。
- 手动档(更加易于二次开发或扩展)。
- 牛犊初生,无限可能。
功能
- 支持 MQTT v3.1、v3.1.1 以及 v5.0 协议。
- 支持 websocket mqtt 子协议(支持 mqtt.js)。
- 支持 http rest api,http api 文档详见。
- 支持 MQTT client 客户端。
- 支持 MQTT server 服务端。
- 支持 MQTT 遗嘱消息。
- 支持 MQTT 保留消息。
- 支持自定义消息(mq)处理转发实现集群。
- MQTT 客户端 阿里云 mqtt 连接 demo。
- 支持 GraalVM 编译成本机可执行程序。
- 支持 Spring boot 项目快速接入(mica-mqtt-spring-boot-starter)。
- mica-mqtt-spring-boot-starter 支持对接 Prometheus + Grafana。
- 基于 redis pub/sub 实现集群,详见 mica-mqtt-broker 模块。
待办
- 优化处理 mqtt session,以及支持 v5.0
- 基于 easy-rule + druid sql 解析,实现规则引擎。
默认端口
端口号 | 协议 | 说明 |
1883 | tcp | mqtt tcp 端口 |
8083 | http、websocket | http api 和 websocket mqtt 子协议端口 |
依赖
Spring boot 项目
<dependency>
<groupId>net.dreamlu</groupId>
<artifactId>mica-mqtt-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
配置详见:mica-mqtt-spring-boot-starter 使用文档
非 Spring boot 项目
<dependency>
<groupId>net.dreamlu</groupId>
<artifactId>mica-mqtt-core</artifactId>
<version>1.2.8</version>
</dependency>
配置详见:mica-mqtt 使用文档
文档
- mica-mqtt-spring-boot-starter 使用文档
- mica-mqtt 使用文档
- mica-mqtt http api 文档详见
- mica-mqtt 发行版本
- t-io 官方文档
- mqtt 协议文档
快速开始
查看 mica-mqtt-example 中有 mqtt 服务端和客户端演示代码, main 方法运行即可。
1. 启动 Server 端
运行 mica-mqtt-example/src/main/java/net/dreamlu/iot/mqtt/server/MqttServerTest.java 的 main 方法
控制台打印如下内容:
2021-07-05 20:42:36,869 INFO server.TioServer -
|----------------------------------------------------------------------------------------|
| t-io site | https://www.tiocloud.com |
| t-io on gitee | https://gitee.com/tywo45/t-io |
| t-io on github | https://github.com/tywo45/t-io |
| t-io version | 3.7.3.v20210706-RELEASE |
| ---------------------------------------------------------------------------------------|
| TioConfig name | Mica-Mqtt-Server |
| Started at | 2021-07-05 20:42:36 |
| Listen on | 127.0.0.1:1883 |
| Main Class | net.dreamlu.iot.mqtt.server.MqttServerTest |
| Jvm start time | 2715ms |
| Tio start time | 16ms |
| Pid | 3588 |
|----------------------------------------------------------------------------------------|
2021-07-05 20:42:37,884 WARN server.MqttServer - Mqtt publish to all ChannelContext is empty.
Mqtt publish to all ChannelContext is empty. 通道上下文为空,即没有客户端。
Mica-Mqtt-Server
├ 当前时间:1625489086843
├ 连接统计
│ ├ 共接受过连接数 :0
│ ├ 当前连接数 :0
│ ├ 异IP连接数 :0
│ └ 关闭过的连接数 :0
├ 消息统计
│ ├ 已处理消息 :0
│ ├ 已接收消息(packet/byte):0/0
│ ├ 已发送消息(packet/byte):0/0b
│ ├ 平均每次TCP包接收的字节数 :0.0
│ └ 平均每次TCP包接收的业务包 :0.0
└ IP统计时段
└ 没有设置ip统计时间
├ 节点统计
│ ├ clientNodes :0
│ ├ 所有连接 :0
│ ├ 绑定user数 :0
│ ├ 绑定token数 :0
│ └ 等待同步消息响应 :0
├ 群组
│ └ groupmap:0
└ 拉黑IP
└ []
2021-07-05 20:44:46,925 WARN server.ServerTioConfig - Mica-Mqtt-Server, 检查心跳, 共0个连接, 取锁耗时0ms, 循环耗时71ms, 心跳超时时间:120000ms
2. 启动 Client 端
运行 mica-mqtt-example/src/main/java/net/dreamlu/iot/mqtt/client/MqttClientTest.java 的 main 方法
控制台打印如下内容,表示客户端连接成功:
2021-07-05 20:46:10,972 ERROR client.TioClient - closeds:0, connections:0
2021-07-05 20:46:10,972 INFO client.TioClient - [1]: curr:0, closed:0, received:(0p)(0b), handled:0, sent:(0p)(0b)
2021-07-05 20:46:12,566 INFO client.ConnectionCompletionHandler - connected to 127.0.0.1:1883
2021-07-05 20:46:12,586 INFO client.MqttClient - MqttClient reconnect send connect result:true
2021-07-05 20:46:12,630 INFO client.DefaultMqttClientProcessor - MqttClient connection succeeded!
2021-07-05 20:46:13,932 INFO client.MqttClientTest - /test/123 mica最牛皮
此时的 Server 端会打印出如下内容:
2021-07-05 20:46:45,654 INFO server.MqttServerTest - subscribe: /test/client mica最牛皮
2021-07-05 20:46:46,926 WARN server.ServerTioConfig -
Mica-Mqtt-Server
├ 当前时间:1625489206923
├ 连接统计
│ ├ 共接受过连接数 :1
│ ├ 当前连接数 :1
│ ├ 异IP连接数 :1
│ └ 关闭过的连接数 :0
├ 消息统计
│ ├ 已处理消息 :20
│ ├ 已接收消息(packet/byte):20/584
│ ├ 已发送消息(packet/byte):37/935b
│ ├ 平均每次TCP包接收的字节数 :29.2
│ └ 平均每次TCP包接收的业务包 :1.0
└ IP统计时段
└ 没有设置ip统计时间
├ 节点统计
│ ├ clientNodes :1
│ ├ 所有连接 :1
│ ├ 绑定user数 :0
│ ├ 绑定token数 :0
│ └ 等待同步消息响应 :0
├ 群组
│ └ groupmap:0
└ 拉黑IP
└ []
2021-07-05 20:46:46,926 WARN server.ServerTioConfig - Mica-Mqtt-Server, 检查心跳, 共1个连接, 取锁耗时0ms, 循环耗时0ms, 心跳超时时间:120000ms
3. Client 接入 Aliyun MQTT 服务(示例)
详见 mica-mqtt-example/src/main/java/net/dreamlu/iot/mqtt/aliyun/MqttClientTest.java
参考vs借鉴
- netty codec mqtt
- jmqtt
- iot-mqtt-server
- netty-mqtt-client
mqtt 客户端工具
- mqttx 优雅的跨平台 MQTT 5.0 客户端工具
- mqtt websocket 调试
- mqttx.fx mqtt 客户端
感谢粉丝支持!适合新手学习MQtt集群开发
想要java集成低延迟、高性能 mqtt 物联网集群附源码源码,
请记得关注+转发+私信回复【物联网Mqtt集群】
如果对你有用,请记得转发,分享更多需要学习的朋友!