mica-mqtt (基于 t-io 的高性能、低延迟物联网组件)

基于 t-io 实现的低延迟高性能的 mqtt 物联网组件。更多使用方式详见: mica-mqtt-example 模块。

功能

  •  支持 MQTT v3.1、v3.1.1 以及 v5.0 协议。

  •  支持 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。

待办

  •  添加 websocket 支持。

  •  优化处理 mqtt session,以及支持 v5.0

依赖

Spring boot 项目

<dependency>
  <groupId>net.dreamlu</groupId>
  <artifactId>mica-mqtt-spring-boot-starter</artifactId>
  <version>1.0.2</version>
</dependency>

配置详见mica-mqtt-spring-boot-starter 使用文档

非 Spring boot 项目

<dependency>
  <groupId>net.dreamlu</groupId>
  <artifactId>mica-mqtt-core</artifactId>
  <version>1.0.2</version>
</dependency>

配置详见mica-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:02021-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:18832021-07-05 20:46:12,586 INFO  client.MqttClient - MqttClient reconnect send connect result:true2021-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

mqtt 客户端调试工具