README.md

    mica mqtt 组件

    Java CI JAVA 8 Mica Maven release Codacy Badge GitHub

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

    使用场景

    • 物联网(云端 mqtt broker)
    • 物联网(边缘端消息通信)
    • 群组类 IM
    • 消息推送

    优势

    • 平凡却不单调,简单却不失精彩。
    • 手动档(更加易于二次开发或扩展)。
    • 牛犊初生,无限可能。

    功能

    • 支持 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.0</version>
    </dependency>

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

    非 Spring boot 项目

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

    配置详见mica-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借鉴

    mqtt 客户端工具

    开源推荐

    鸣谢

    感谢 JetBrains 提供的免费开源 License:

    JetBrains

    微信公众号

    如梦技术

    精彩内容每日推荐!

    项目简介

    基于 t-io 实现的低延迟、高性能的 mqtt 组件。🔝 记得右上角点个star 关注更新!

    发行版本

    当前项目没有发行版本

    贡献者 7

    开发语言

    • Java 99.8 %
    • Dockerfile 0.1 %
    • Shell 0.0 %