README.md 9.7 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
[![Mica-mqtt maven snapshots](https://img.shields.io/nexus/s/https/oss.sonatype.org/net.dreamlu/mica-mqtt-core.svg?style=flat-square)](https://oss.sonatype.org/content/repositories/snapshots/net/dreamlu/mica-mqtt-core/)
如梦技术's avatar
如梦技术 已提交
6 7 8
[![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
如梦技术 已提交
9
基于 `t-io` 实现的**低延迟****高性能**`mqtt` 物联网组件。更多使用方式详见: **mica-mqtt-example** 模块。
如梦技术's avatar
如梦技术 已提交
10

如梦技术's avatar
如梦技术 已提交
11 12 13 14 15 16
## 使用场景

- 物联网(云端 mqtt broker)
- 物联网(边缘端消息通信)
- 群组类 IM
- 消息推送
浅梦2013's avatar
浅梦2013 已提交
17
- 简单易用的 mqtt 客户端
如梦技术's avatar
如梦技术 已提交
18

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

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

如梦技术's avatar
如梦技术 已提交
39 40
## 待办

如梦技术's avatar
如梦技术 已提交
41 42
- [ ] 优化处理 mqtt session,以及支持 v5.0 
- [ ] 基于 easy-rule + druid sql 解析,实现规则引擎。
43 44 45 46 47 48 49 50

## 默认端口

| 端口号 | 协议            | 说明                             |
| ------ | --------------- | -------------------------------- |
| 1883   | tcp             | mqtt tcp 端口                    |
| 8083   | http、websocket | http api 和 websocket mqtt 子协议端口 |

如梦技术's avatar
如梦技术 已提交
51
## 依赖
52 53 54 55 56
### Spring boot 项目
```xml
<dependency>
  <groupId>net.dreamlu</groupId>
  <artifactId>mica-mqtt-spring-boot-starter</artifactId>
如梦技术's avatar
如梦技术 已提交
57
  <version>1.2.8</version>
58 59 60
</dependency>
```

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

63
### 非 Spring boot 项目
如梦技术's avatar
如梦技术 已提交
64 65 66 67
```xml
<dependency>
  <groupId>net.dreamlu</groupId>
  <artifactId>mica-mqtt-core</artifactId>
如梦技术's avatar
如梦技术 已提交
68
  <version>1.2.8</version>
如梦技术's avatar
如梦技术 已提交
69 70 71
</dependency>
```

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

如梦技术's avatar
如梦技术 已提交
74
## 文档
浅梦2013's avatar
浅梦2013 已提交
75
- [mica-mqtt-spring-boot-starter 使用文档](mica-mqtt-spring-boot-starter/README.md)
如梦技术's avatar
如梦技术 已提交
76
- [mica-mqtt 使用文档](mica-mqtt-core/README.md)
如梦技术's avatar
如梦技术 已提交
77
- [mica-mqtt http api 文档详见](docs/http-api.md)
如梦技术's avatar
如梦技术 已提交
78
- [mica-mqtt 发行版本](CHANGELOG.md)
如梦技术's avatar
如梦技术 已提交
79
- [t-io 官方文档](https://www.tiocloud.com/doc/tio/85)
如梦技术's avatar
如梦技术 已提交
80 81
- [mqtt 协议文档](https://github.com/mcxiaoke/mqtt)

智布道's avatar
智布道 已提交
82
##  快速开始
如梦技术's avatar
如梦技术 已提交
83
查看 **mica-mqtt-example** 中有 `mqtt` 服务端和客户端演示代码, `main` 方法运行即可。
智布道's avatar
智布道 已提交
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 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188

### 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
如梦技术 已提交
189 190 191
### 3. Client 接入 Aliyun MQTT 服务(示例)

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

193
## 参考vs借鉴
如梦技术's avatar
如梦技术 已提交
194
- [netty codec mqtt](https://github.com/netty/netty/tree/4.1/codec-mqtt)
195
- [jmqtt](https://github.com/Cicizz/jmqtt)
如梦技术's avatar
如梦技术 已提交
196
- [iot-mqtt-server](https://gitee.com/recallcode/iot-mqtt-server)
197
- [netty-mqtt-client](https://github.com/jetlinks/netty-mqtt-client)
如梦技术's avatar
如梦技术 已提交
198

如梦技术's avatar
如梦技术 已提交
199
## mqtt 客户端工具
如梦技术's avatar
如梦技术 已提交
200
- [mqttx 优雅的跨平台 MQTT 5.0 客户端工具](https://mqttx.app/cn/)
201
- [mqtt websocket 调试](http://tools.emqx.io/)
如梦技术's avatar
如梦技术 已提交
202 203
- [mqttx.fx mqtt 客户端](http://mqttfx.org/)

如梦技术's avatar
如梦技术 已提交
204
## 开源推荐
205 206
- `Avue` 基于 vue 可配置化的前端框架:[https://gitee.com/smallweigit/avue](https://gitee.com/smallweigit/avue)
- `pig` 上央视的微服务框架(架构必备):[https://gitee.com/log4j/pig](https://gitee.com/log4j/pig)
207
- `SpringBlade` 企业级解决方案(企业开发必备):[https://gitee.com/smallc/SpringBlade](https://gitee.com/smallc/SpringBlade)
208 209 210
- `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
如梦技术 已提交
211

浅梦2013's avatar
浅梦2013 已提交
212 213 214 215 216
## 鸣谢
感谢 JetBrains 提供的免费开源 License:

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

如梦技术's avatar
如梦技术 已提交
217 218 219 220 221
## 微信公众号

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

精彩内容每日推荐!