现象
物联网平台消息偶发丢失的情况,经过排查发现有可能是MQTT的问题,经过以下操作数据丢失情况减少,客户端使用HiveMQ的MQTT客户端
解决方案
1.启用EMQX的消息保留,并配置缓存大小
2.启用MQTT5.0的cleanStart为false,并设置sessionExpiryInterval
mqttClient.toAsync()
.connectWith()
.cleanStart(false)
.sessionExpiryInterval(10 * 60)
.keepAlive(30)
.send();
3.多线程消费,防止消息积压
4.设置Qos为2
mqttClient.toAsync()
.subscribeWith()
.topicFilter(topic)
.qos(MqttQos.EXACTLY_ONCE)
.callback(publish -> {
//在这里处理消息
})
.send();
5.修改EMQX报文大小限制,默认报文大小限制为1MB,实际可能会大于1MB