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 遗嘱消息。
支持 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.1.0 - 2023-03-05
✨ 【不兼容】调整接口参数,方便使用
✨ 【不兼容】底层重构调整
✨ 兼容更多 Spring boot 版本,支持 2.1.0.RELEASE 以上版本。
✨ ssl 支持双向认证 gitee #I61AHJ 感谢 @DoubleH 反馈
🐛 修复遗嘱消息判断 gitee #I6BRBV 感谢 @tan90 反馈。
🐛 修复错别字 gitee #I6F2PA 感谢 @hpz 反馈
⬆️ 依赖升级
五、JFinal 快速接入
5.1. 添加依赖
<dependency>
<groupId>net.dreamlu</groupId>
<artifactId>jfinal-mica-mqtt-client</artifactId>
<version>${最新版本}</version>
</dependency>
5.2. 删除 jfinal-demo 中的 slf4j-nop 依赖
5.3. 添加 slf4j-log4j12
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.33</version>
</dependency>
5.4. 在 jfinal Config configPlugin 中添加 mica-mqtt client 插件
MqttClientPlugin mqttClientPlugin = new MqttClientPlugin();
mqttClientPlugin.config(mqttClientCreator -> {
// 设置 mqtt 连接配置信息
mqttClientCreator
.clientId("clientId") // 按需配置,相同的会互踢
.ip("mqtt.dreamlu.net")
.port(1883)
.connectListener(Aop.get(MqttClientConnectListener.class));
});
me.add(mqttClientPlugin);
5.5. 在 jfinal Config onStart 启动完成之后添加 mqtt 订阅
@Override
public void onStart() {
IMqttClientMessageListener clientMessageListener = Aop.get(TestMqttClientMessageListener.class);
MqttClientKit.subQos0("#", clientMessageListener);
}
5.6. 使用 MqttClientKit 发送消息
MqttClientKit.publish("mica", "hello".getBytes(StandardCharsets.UTF_8));
5.7. 示例代码 MqttClientConnectListener
public class MqttClientConnectListener implements IMqttClientConnectListener {
@Override
public void onConnected(ChannelContext channelContext, boolean isReconnect) {
if (isReconnect) {
System.out.println("重连 mqtt 服务器重连成功...");
} else {
System.out.println("连接 mqtt 服务器成功...");
}
}
@Override
public void onDisconnect(ChannelContext channelContext, Throwable throwable, String remark, boolean isRemove) {
System.out.println("mqtt 链接断开 remark:" + remark + " isRemove:" + isRemove);
}
}
5.8. 示例 TestMqttClientMessageListener
public class TestMqttClientMessageListener implements IMqttClientMessageListener {
@Override
public void onMessage(ChannelContext context, String topic, MqttPublishMessage message, ByteBuffer payload) {
System.out.println("收到消息 topic:" + topic + "内容:\n" + ByteBufferUtil.toString(byteBuffer));
}
}