mica-mqtt 2.1.0 发布,更好的支持 ssl 双向认证

一、简介

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 遗嘱消息。

  • 支持 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));
   }
}

六、使用文档和示例

评论区

山东小木

2023-03-06 14:27

有没有典型的系统应用案例?

Dreamlu

2023-03-06 15:00

@山东小木 太多了,先不说智能家居,这都是小米他们的天下。其他的比如二维码收款的智能关播,智能售货机。公交车现在实时显示站点也是车上装了一个盒子。然后各种政府的智慧交通、隧道、医院、学校。现在互联网在萎缩,物联网是未来,发展空间很大。再结合 AI 无限可能。

Dreamlu

2023-03-06 15:03

之前还有面向企业的消毒柜合作项目,以前需要人去每个酒店房间操作,现在智能化之后一个人可以在前台统一处理。

bobotianxia

2023-03-10 12:20

@Dreamlu 春哥,有没有在高并发、高节拍的生产现场验证过数据采集?

rctmlb

2023-03-10 21:54

@山东小木 MQTT的订阅机制,可以让客户端APP按需接收信息,我们项目也使用了替代WEBSOCKET

热门分享

扫码入社