java集成低延迟、高性能的 mqtt 物联网集群附源码

java集成低延迟、高性能的 mqtt 物联网集群附源码

解决方案goocz2024-12-13 12:57:0524A+A-

基于 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.javamain 方法

控制台打印如下内容:

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.javamain 方法

控制台打印如下内容,表示客户端连接成功:

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集群

如果对你有用,请记得转发,分享更多需要学习的朋友!

点击这里复制本文地址 以上内容由goocz整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

果子教程网 © All Rights Reserved.  蜀ICP备2024111239号-5