您现在的位置是:首页 > 文章详情

mcia-mqtt 1.2.2 发布,新增发布鉴权接口

日期:2021-12-27点击:577

一、简介

mica-mqtt 基于 t-io 实现的简单低延迟高性能 的 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 模块

三、使用场景

  • 物联网(云端)

  • 物联网(边缘端)

  • 群组类 IM

  • 消息推送

  • 简单易用的 MQTT 客户端

四、更新记录

1.2.2 - 2021-12-26

  • ✨ mica-mqtt server 添加发布权限接口,无权限直接断开连接,避免高级别 qos 重试浪费资源。

  • ✨ mica-mqtt-broker 优化节点信息存储

  • ✨ mica-mqtt client 重复订阅优化。感谢 @一片小雨滴

  • ✨ mica-mqtt client 抽象 IMqttClientSession 接口。

  • 🐛 修复重构 AbstractMqttMessageDispatcher 保持跟 mica-mqtt-broker 逻辑一致 gitee #I4MA6A 感谢 @胡萝博

  • ⬆️ mica-mqtt-example 升级 log4j2 到 2.17.0

1.2.1 - 2021-12-11

  • ✨ mica-mqtt 优化 topic 匹配。

  • ✨ mica-mqtt client disconnect 不再自动重连 gitee #I4L0WK 感谢 @willianfu。

  • ✨ mica-mqtt client 添加 retryCount 配置 gitee #I4L0WK 感谢 @willianfu。

  • ✨ mica-mqtt-model message 添加 json 序列化。

  • ✨ mica-mqtt-broker 重新梳理逻辑。

  • 🐛 mica-mqtt-spring-boot-starter 在 boot 2.6.x 下 bean 循环依赖 gitee #I4LUZP 感谢 @hongfeng11。

  • 🐛 mica-mqtt server 同一个 clientId 踢出时清除老的 session。

  • 🐛 mica-mqtt server 集群下一个 clientId 只允许连接到一台服务器。

  • 🐛 mica-mqtt client 修复 IMqttClientConnectListener onDisconnect 空指针。

  • 📝 mica-mqtt-model 添加 README.md

五、Spring boot 快速接入

5.1 添加依赖

 <dependency>     <groupId>net.dreamlu</groupId>     <artifactId>mica-mqtt-spring-boot-starter</artifactId>     <version>1.2.2</version> </dependency>

5.2 服务端配置示例

 mqtt:  server:    enabled: true               # 是否开启,默认:true    ip: 0.0.0.0                 # 服务端 ip 默认:0.0.0.0    port: 5883                  # 端口,默认:1883    name: Mica-Mqtt-Server      # 名称,默认:Mica-Mqtt-Server    buffer-allocator: HEAP      # 堆内存和堆外内存,默认:堆内存    heartbeat-timeout: 120000   # 心跳超时,单位毫秒,默认: 1000 * 120    read-buffer-size: 8092      # 接收数据的 buffer size,默认:8092    max-bytes-in-message: 8092  # 消息解析最大 bytes 长度,默认:8092    debug: true                 # 如果开启 prometheus 指标收集建议关闭    websocket-enable: true      # 开启 websocket 子协议,默认开启    websocket-port: 8083        # websocket 端口,默认:8083

5.3 服务端可实现接口(注册成 Spring Bean 即可)

接口 是否必须 说明
IMqttServerUniqueIdService 用于 clientId 不唯一时,自定义实现唯一标识,后续接口使用它替代 clientId
IMqttServerAuthHandler 用于服务端认证
IMqttServerSubscribeValidator 否(建议实现) 1.1.3 新增,用于对客户端订阅校验
IMqttServerPublishPermission 否(建议实现) 1.2.2 新增,用于对客户端发布权限校验
IMqttMessageListener 消息监听
IMqttConnectStatusListener 连接状态监听
IMqttSessionManager session 管理
IMqttMessageStore 集群是,单机否 遗嘱和保留消息存储
AbstractMqttMessageDispatcher 集群是,单机否 消息转发,(遗嘱、保留消息转发)
IpStatListener t-io ip 状态监听

5.4 Prometheus + Grafana 监控对接

得益于 t-io 良好的设计,监控指标直接对接的 t-iostat,目前支持下列指标,后期会不断完善。

支持得指标 说明
mqtt_connections_accepted 共接受过连接数
mqtt_connections_closed 关闭过的连接数
mqtt_connections_size 当前连接数
mqtt_messages_handled_packets 已处理消息数
mqtt_messages_handled_bytes 已处理消息字节数
mqtt_messages_received_packets 已接收消息数
mqtt_messages_received_bytes 已处理消息字节数
mqtt_messages_send_packets 已发送消息数
mqtt_messages_send_bytes 已发送消息字节数

关于 mica-mqtt-spring-boot-starter 更多请查看文档:https://gitee.com/596392912/mica-mqtt/tree/master/mica-mqtt-spring-boot-starter

六、普通 java 项目接入

6.1 maven 依赖

  <dependency>    <groupId>net.dreamlu</groupId>    <artifactId>mica-mqtt-core</artifactId>    <version>1.2.2</version>  </dependency>

6.2 mica-mqtt 客户端

  // 初始化 mqtt 客户端  MqttClient client = MqttClient.create()      .ip("127.0.0.1")      .port(1883)                     // 默认:1883      .username("admin")      .password("123456")      .version(MqttVersion.MQTT_5)    // 默认:3_1_1      .clientId("xxxxxx")             // 默认:MICA-MQTT- 前缀和 36进制的纳秒数      .connect();                     // 连接        // 消息订阅,同类方法 subxxx      client.subQos0("/test/#", (topic, payload) -> {          logger.info(topic + '\t' + ByteBufferUtil.toString(payload));      });      // 取消订阅      client.unSubscribe("/test/#");        // 发送消息      client.publish("/test/client", ByteBuffer.wrap("mica最牛皮".getBytes(StandardCharsets.UTF_8)));        // 断开连接      client.disconnect();      // 重连      client.reconnect();      // 停止      client.stop();

6.3 mica-mqtt 服务端

 // 注意:为了能接受更多链接(降低内存),请添加 jvm 参数 -Xss129k MqttServer mqttServer = MqttServer.create()     // 默认:0.0.0.0    .ip("0.0.0.0")     // 默认:1883    .port(1883)     // 默认为: 8092(mqtt 默认最大消息大小),为了降低内存可以减小小此参数,如果消息过大 t-io 会尝试解析多次(建议根据实际业务情况而定)    .readBufferSize(512)     // 消息监听    .messageListener((context, clientId, message) -> {         logger.info("clientId:{} message:{} payload:{}", clientId, message, ByteBufferUtil.toString(message.getPayload()));    })    .debug() // 开启 t-io debug 信息日志    .start();  // 发送给某个客户端 mqttServer.publish("clientId","/test/123", ByteBuffer.wrap("mica最牛皮".getBytes()));  // 发送给所有在线监听这个 topic 的客户端 mqttServer.publishAll("/test/123", ByteBuffer.wrap("mica最牛皮".getBytes()));  // 停止服务 mqttServer.stop() 
原文链接:https://www.oschina.net/news/175752/mica-mqtt-1-2-2-released
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章