一、简介
mica-mqtt 基于 java aio 实现的 简略 、 低提早 、 高性能 的 mqtt 物联网开源组件。
mica-mqtt 更加易于集成到已有服务和二次开发,升高自研物联网平台开发成本。
二、性能
- 反对 MQTT v3.1、v3.1.1 以及 v5.0 协定。
- 反对 websocket mqtt 子协定(反对 mqtt.js)。
- 反对 http rest api,http api 文档详见。
- 反对 MQTT client 客户端。
- 反对 MQTT server 服务端。
- 反对 MQTT client、server 共享订阅反对(捐助 VIP 版采纳 topic 树存储,跟 topic 数无关,百万 topic 性能仍旧)。
- 反对 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 broker)
- 物联网(边缘端音讯通信)
- 群组类 IM
- 音讯推送
- 简略、易用的 mqtt client 客户端
四、更新记录
v2.2.4 – 2023-09-02
- 合并去年开源之夏的服务端共享订阅和欠缺。
- 优化 topic 测验
- 雷同 clientId 订阅雷同 匹配 topic 应该取最大的 qos gitee #I7WWPN
共享订阅
mica-mqtt 反对两种 共享订阅 形式:
- 共享订阅:订阅前缀
$queue/
,多个客户端订阅了$queue/topic
,发布者公布到 topic,则只有一个客户端会接管到音讯。 - 分组订阅:订阅前缀
$share/<group>/
,组客户端订阅了$share/group1/topic
、$share/group2/topic
..,发布者公布到 topic,则音讯会公布到每个 group 中,然而每个 group 中只有一个客户端会接管到音讯。
留神: 如果 topic
以 /
结尾,例如:/topic/test
,须要订阅 $share/group1//topic/test
。
五、疾速接入
Spring boot 我的项目
客户端:
<dependency>
<groupId>net.dreamlu</groupId>
<artifactId>mica-mqtt-client-spring-boot-starter</artifactId>
<version>${mica-mqtt.version}</version>
</dependency>
客户端配置:
mqtt:
client:
enabled: true # 是否开启客户端,默认:true
ip: 127.0.0.1 # 连贯的服务端 ip,默认:127.0.0.1
port: 1883 # 端口:默认:1883
name: Mica-Mqtt-Client # 名称,默认:Mica-Mqtt-Client
clientId: 000001 # 客户端 Id(十分重要,个别为设施 sn,不可反复)user-name: mica # 认证的用户名
password: 123456 # 认证的明码
timeout: 5 # 超时工夫,单位:秒,默认:5 秒
reconnect: true # 是否重连,默认:true
re-interval: 5000 # 重连工夫,默认 5000 毫秒
version: mqtt_3_1_1 # mqtt 协定版本,可选 MQTT_3_1、mqtt_3_1_1、mqtt_5,默认:mqtt_3_1_1
read-buffer-size: 8KB # 接收数据的 buffer size,默认:8k
max-bytes-in-message: 10MB # 音讯解析最大 bytes 长度,默认:10M
buffer-allocator: heap # 堆内存和堆外内存,默认:堆内存
keep-alive-secs: 60 # keep-alive 工夫,单位:秒
clean-session: true # mqtt clean session,默认:true
ssl:
enabled: false # 是否开启 ssl 认证,2.1.0 开始反对双向认证
keystore-path: # 可选参数:ssl 双向认证 keystore 目录,反对 classpath:/ 门路。keystore-pass: # 可选参数:ssl 双向认证 keystore 明码
truststore-path: # 可选参数:ssl 双向认证 truststore 目录,反对 classpath:/ 门路。truststore-pass: # 可选参数:ssl 双向认证 truststore 明码
订阅示例:
@Service
public class MqttClientSubscribeListener {private static final Logger logger = LoggerFactory.getLogger(MqttClientSubscribeListener.class);
@MqttClientSubscribe("/test/#")
public void subQos0(String topic, byte[] payload) {logger.info("topic:{} payload:{}", topic, new String(payload, StandardCharsets.UTF_8));
}
@MqttClientSubscribe(value = "/qos1/#", qos = MqttQoS.AT_LEAST_ONCE)
public void subQos1(String topic, byte[] payload) {logger.info("topic:{} payload:{}", topic, new String(payload, StandardCharsets.UTF_8));
}
@MqttClientSubscribe("/sys/${productKey}/${deviceName}/thing/sub/register")
public void thingSubRegister(String topic, byte[] payload) {// 1.3.8 开始反对,@MqttClientSubscribe 注解反对 ${} 变量替换,会默认替换成 +
// 留神:mica-mqtt 会先从 Spring boot 配置中替换参数 ${},如果存在配置会优先被替换。logger.info("topic:{} payload:{}", topic, new String(payload, StandardCharsets.UTF_8));
}
}
服务端:
<dependency>
<groupId>net.dreamlu</groupId>
<artifactId>mica-mqtt-server-spring-boot-starter</artifactId>
<version>${mica-mqtt.version}</version>
</dependency>
客户端配置:
mqtt:
server:
enabled: true # 是否开启服务端,默认:true
# ip: 0.0.0.0 # 服务端 ip 默认为空,0.0.0.0,倡议不要设置
port: 1883 # 端口,默认:1883
name: Mica-Mqtt-Server # 名称,默认:Mica-Mqtt-Server
buffer-allocator: HEAP # 堆内存和堆外内存,默认:堆内存
heartbeat-timeout: 120000 # 心跳超时,单位毫秒,默认: 1000 * 120
read-buffer-size: 8KB # 接收数据的 buffer size,默认:8k
max-bytes-in-message: 10MB # 音讯解析最大 bytes 长度,默认:10M
auth:
enable: false # 是否开启 mqtt 认证
username: mica # mqtt 认证用户名
password: mica # mqtt 认证明码
debug: true # 如果开启 prometheus 指标收集倡议敞开
stat-enable: true # 开启指标收集,debug 和 prometheus 开启时须要关上,默认开启,敞开节俭内存
web-port: 8083 # http、websocket 端口,默认:8083
websocket-enable: true # 是否开启 websocket,默认:true
http-enable: false # 是否开启 http api,默认:false
http-basic-auth:
enable: false # 是否开启 http basic auth,默认:false
username: mica # http basic auth 用户名
password: mica # http basic auth 明码
ssl: # mqtt tcp ssl 认证
enabled: false # 是否开启 ssl 认证,2.1.0 开始反对双向认证
keystore-path: # 必须参数:ssl keystore 目录,反对 classpath:/ 门路。keystore-pass: # 必选参数:ssl keystore 明码
truststore-path: # 可选参数:ssl 双向认证 truststore 目录,反对 classpath:/ 门路。truststore-pass: # 可选参数:ssl 双向认证 truststore 明码
client-auth: none # 是否须要客户端认证(双向认证),默认:NONE(不须要)
非 Spring boot 我的项目
客户端:
<dependency>
<groupId>net.dreamlu</groupId>
<artifactId>mica-mqtt-client</artifactId>
<version>${mica-mqtt.version}</version>
</dependency>
服务端:
<dependency>
<groupId>net.dreamlu</groupId>
<artifactId>mica-mqtt-server</artifactId>
<version>${mica-mqtt.version}</version>
</dependency>
六、应用文档和示例
- mqtt 科普、mqttx、mica-mqtt 的应用 视频
- mica-mqtt-client 应用文档
- mica-mqtt-server 应用文档
- mica-mqtt-client-spring-boot-starter 应用文档
- mica-mqtt-server-spring-boot-starter 应用文档
- mica-mqtt http api 文档详见
- mica-mqtt 发行版本记录