README.md 8.8 KB
Newer Older
如梦技术's avatar
如梦技术 已提交
1
# mica mqtt 组件
浅梦2013's avatar
浅梦2013 已提交
2
[![Java CI](https://github.com/lets-mica/mica-mqtt/workflows/Java%20CI/badge.svg)](https://github.com/lets-mica/mica-mqtt/actions)
如梦技术's avatar
如梦技术 已提交
3
![JAVA 8](https://img.shields.io/badge/JDK-1.8+-brightgreen.svg)
如梦技术's avatar
如梦技术 已提交
4
[![Mica Maven release](https://img.shields.io/nexus/r/https/oss.sonatype.org/net.dreamlu/mica-mqtt-core.svg?style=flat-square)](https://mvnrepository.com/artifact/net.dreamlu/mica-mqtt-core)
如梦技术's avatar
如梦技术 已提交
5 6 7
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/30dad82f79f34e41bafbc3cef6b68fc3)](https://www.codacy.com/gh/lets-mica/mica-mqtt/dashboard?utm_source=github.com&utm_medium=referral&utm_content=lets-mica/mica-mqtt&utm_campaign=Badge_Grade)
[![GitHub](https://img.shields.io/github/license/lets-mica/mica-mqtt.svg?style=flat-square)](https://github.com/lets-mica/mica-mqtt/blob/master/LICENSE)

如梦技术's avatar
如梦技术 已提交
8
基于 `t-io` 实现的**低延迟****高性能**`mqtt` 物联网组件。更多使用方式详见: **mica-mqtt-example** 模块。
如梦技术's avatar
如梦技术 已提交
9

浅梦2013's avatar
浅梦2013 已提交
10 11 12 13 14
## 优势
- 平凡却不单调,简单却不失精彩。
- 手动档(更加易于二次开发或扩展)。
- 牛犊初生,无限可能。

如梦技术's avatar
如梦技术 已提交
15 16
## 功能
- [x] 支持 MQTT v3.1、v3.1.1 以及 v5.0 协议。
浅梦2013's avatar
浅梦2013 已提交
17
- [x] 支持 websocket mqtt 子协议(支持 mqtt.js)。
如梦技术's avatar
如梦技术 已提交
18
- [x] 支持 http rest api,[http api 文档详见](docs/http-api.md)
如梦技术's avatar
如梦技术 已提交
19 20 21 22 23
- [x] 支持 MQTT client 客户端。
- [x] 支持 MQTT server 服务端。
- [x] 支持 MQTT 遗嘱消息。
- [x] 支持 MQTT 保留消息。
- [x] 支持自定义消息(mq)处理转发实现集群。
24
- [x] MQTT 客户端 阿里云 mqtt 连接 demo。
wxdfun's avatar
wxdfun 已提交
25
- [x] 支持 GraalVM 编译成本机可执行程序。
浅梦2013's avatar
浅梦2013 已提交
26 27
- [x] 支持 Spring boot 项目快速接入(mica-mqtt-spring-boot-starter)。
- [x] mica-mqtt-spring-boot-starter 支持对接 Prometheus + Grafana。
如梦技术's avatar
如梦技术 已提交
28

如梦技术's avatar
如梦技术 已提交
29
## 待办
30
- [ ] 优化处理 mqtt session,以及支持 v5.0 
如梦技术's avatar
如梦技术 已提交
31

如梦技术's avatar
如梦技术 已提交
32
## 依赖
33 34 35 36 37
### Spring boot 项目
```xml
<dependency>
  <groupId>net.dreamlu</groupId>
  <artifactId>mica-mqtt-spring-boot-starter</artifactId>
如梦技术's avatar
如梦技术 已提交
38
  <version>1.0.6</version>
39 40 41
</dependency>
```

浅梦2013's avatar
浅梦2013 已提交
42
**配置详见**[mica-mqtt-spring-boot-starter 使用文档](mica-mqtt-spring-boot-starter/README.md)
浅梦2013's avatar
浅梦2013 已提交
43

44
### 非 Spring boot 项目
如梦技术's avatar
如梦技术 已提交
45 46 47 48
```xml
<dependency>
  <groupId>net.dreamlu</groupId>
  <artifactId>mica-mqtt-core</artifactId>
如梦技术's avatar
如梦技术 已提交
49
  <version>1.0.6</version>
如梦技术's avatar
如梦技术 已提交
50 51 52
</dependency>
```

如梦技术's avatar
如梦技术 已提交
53
**配置详见**[mica-mqtt 使用文档](mica-mqtt-core/README.md)
浅梦2013's avatar
浅梦2013 已提交
54

如梦技术's avatar
如梦技术 已提交
55
## 文档
浅梦2013's avatar
浅梦2013 已提交
56
- [mica-mqtt-spring-boot-starter 使用文档](mica-mqtt-spring-boot-starter/README.md)
如梦技术's avatar
如梦技术 已提交
57
- [mica-mqtt 使用文档](mica-mqtt-core/README.md)
如梦技术's avatar
如梦技术 已提交
58
- [mica-mqtt http api 文档详见](docs/http-api.md)
如梦技术's avatar
如梦技术 已提交
59
- [mica-mqtt 发行版本](CHANGELOG.md)
如梦技术's avatar
如梦技术 已提交
60
- [t-io 官方文档](https://www.tiocloud.com/doc/tio/85)
如梦技术's avatar
如梦技术 已提交
61 62
- [mqtt 协议文档](https://github.com/mcxiaoke/mqtt)

智布道's avatar
智布道 已提交
63
##  快速开始
如梦技术's avatar
如梦技术 已提交
64
查看 **mica-mqtt-example** 中有 `mqtt` 服务端和客户端演示代码, `main` 方法运行即可。
智布道's avatar
智布道 已提交
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169

### 1. 启动 Server 端

运行 `mica-mqtt-example/src/main/java/net/dreamlu/iot/mqtt/server/MqttServerTest.java``main` 方法

控制台打印如下内容:

```text
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.` 通道上下文为空,即没有客户端。

```text
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` 方法

控制台打印如下内容,表示客户端连接成功:
```text
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 端会打印出如下内容:

```text
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
```

如梦技术's avatar
如梦技术 已提交
170 171 172
### 3. Client 接入 Aliyun MQTT 服务(示例)

详见 `mica-mqtt-example/src/main/java/net/dreamlu/iot/mqtt/aliyun/MqttClientTest.java`
智布道's avatar
智布道 已提交
173

174
## 参考vs借鉴
如梦技术's avatar
如梦技术 已提交
175
- [netty codec mqtt](https://github.com/netty/netty/tree/4.1/codec-mqtt)
176
- [jmqtt](https://github.com/Cicizz/jmqtt)
如梦技术's avatar
如梦技术 已提交
177
- [iot-mqtt-server](https://gitee.com/recallcode/iot-mqtt-server)
178
- [netty-mqtt-client](https://github.com/jetlinks/netty-mqtt-client)
如梦技术's avatar
如梦技术 已提交
179

如梦技术's avatar
如梦技术 已提交
180
## mqtt 客户端工具
如梦技术's avatar
如梦技术 已提交
181 182 183
- [mqttx 优雅的跨平台 MQTT 5.0 客户端工具](https://mqttx.app/cn/)
- [mqttx.fx mqtt 客户端](http://mqttfx.org/)

如梦技术's avatar
如梦技术 已提交
184
## 开源推荐
185 186
- `Avue` 基于 vue 可配置化的前端框架:[https://gitee.com/smallweigit/avue](https://gitee.com/smallweigit/avue)
- `pig` 上央视的微服务框架(架构必备):[https://gitee.com/log4j/pig](https://gitee.com/log4j/pig)
187
- `SpringBlade` 企业级解决方案(企业开发必备):[https://gitee.com/smallc/SpringBlade](https://gitee.com/smallc/SpringBlade)
188 189 190
- `IJPay` 支付 SDK,让支付触手可及:[https://gitee.com/javen205/IJPay](https://gitee.com/javen205/IJPay)
- `JustAuth` 史上最全的第三方登录开源库: [https://github.com/zhangyd-c/JustAuth](https://github.com/zhangyd-c/JustAuth)
- `spring-boot-demo` Spring boot 深度学习实战: [https://github.com/xkcoding/spring-boot-demo](https://github.com/xkcoding/spring-boot-demo)
如梦技术's avatar
如梦技术 已提交
191

浅梦2013's avatar
浅梦2013 已提交
192 193 194 195 196
## 鸣谢
感谢 JetBrains 提供的免费开源 License:

[![JetBrains](docs/img/jetbrains.png)](https://www.jetbrains.com/?from=mica-mqtt)

如梦技术's avatar
如梦技术 已提交
197 198 199 200 201
## 微信公众号

![如梦技术](docs/img/dreamlu-weixin.jpg)

精彩内容每日推荐!