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

mica-mqtt 1.1.4 发布,重构自定义接口

日期:2021-10-18点击:517

一、简介

mica-mqtt 基于 t-io 实现的简单低延迟高性能 的 mqtt 物联网开源组件。使用详见 mica-mqtt gitee 源码 mica-mqtt-example 模块

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 session,以及支持部分 mqtt v5.0 新特性。

四、更新记录

1.1.4

  • ✨ 添加 IMqttServerUniqueIdService 接口,用来处理 clientId 不唯一的场景。详见:gitee #I4DXQU
  • ✨ 微调 IMqttServerAuthHandler 认证,添加 uniqueId 参数。

1.1.3

  • ✨ 状态事件接口 IMqttConnectStatusListener 添加 ChannelContext 参数。
  • ✨ 从认证中拆分 IMqttServerSubscribeValidator 订阅校验接口,添加 ChannelContext、clientId 参数。 
  • ✨ 认证 IMqttServerAuthHandler 调整包、添加 ChannelContext 参数。
  • ✨ 完善文档和示例,添加默认端口号说明。
  • ⬆️ 依赖升级。

五、Spring boot 快速接入

5.1 添加依赖

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

 

5.2 服务端配置示例

 mqtt: server: enabled: true # 是否开启,默认:true ip: 127.0.0.1 # 服务端 ip 默认:127.0.0.1 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

1.1.4 新增,用于 clientId 不唯一时,自定义实现唯一标识,后续接口使用它替代 clientId

IMqttServerAuthHandler

用于服务端认证

IMqttServerSubscribeValidator

1.1.3 新增,用于服务端订阅校验

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.1.4</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() // 默认:127.0.0.1 .ip("127.0.0.1") // 默认:1883 .port(1883) // 默认为: 8092(mqtt 默认最大消息大小),为了降低内存可以减小小此参数,如果消息过大 t-io 会尝试解析多次(建议根据实际业务情况而定) .readBufferSize(512) // 消息监听 .messageListener((clientId, topic, mqttQoS, payload) -> { logger.info("clientId:{} topic:{} mqttQoS:{} message:{}", clientId, topic, mqttQoS, ByteBufferUtil.toString(payload)); }) .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/164649/mica-mqtt-1-1-4-released
关注公众号

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

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

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

文章评论

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

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章