一、简介
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 明码
订阅示例:
@Servicepublic 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 发行版本记录