Mqtt - 当......时使用QoS 1

时间:2015-07-14 18:29:22

标签: node.js mqtt

我正在关注非常好的教程 www.hivemq.com/mqtt-essentials-part-6-mqtt-quality-of-service-levels/ 但我无法理解实施

  

当然,您的应用程序必须容忍重复和处理   他们因此。

能给我一个简单的例子吗?

例如,我现在喜欢 (我按照https://medium.com/@lelylan/how-to-build-an-high-availability-mqtt-cluster-for-the-internet-of-things-8011a06bd000

设置部署
module.exports.authorizePublish = function(client, topic, payload, callback) {
    var chunks = topic.split('/');
    if(chunks.length === 4) {
        Debug('AUTHORIZING SUBSCRIBE', client.device_id == chunks[1]);
        Debug('NICKNAME', chunks[1]);
        Debug('CHANNEL', chunks[3]);
        Debug('TOPIC', chunks[2]);
        Debug('PAYLOAD', payload.toString('utf8'));

        var data = {
            deviceNickname:chunks[1],
            channel:chunks[3],
            topic:chunks[2],
            payload:payload.toString('utf8')
        };
        Message.insert(data, function (err, message) {
                if (err){
                    Debug(err);
                    return;
                }
                Debug(message);
        });
    }
    callback(null, client.device_id === chunks[1]);
}

1 个答案:

答案 0 :(得分:0)

我仍然是MQTT的学习者,而不是专家,但我对使用QoS 1处理重复消息的理解如下:

假设您有一个应用程序,无论出于何种原因需要计算从代理收到的消息。但是,您不想接受重复的消息(当您的客户没有及时确认消息时发送),以便将其考虑在内。

我使用Java Paho客户端,因此它的代码是:

int counter = 0;
public void messageArrived(String topic, MqttMessage message) throws MqttException {
   if (message.isDuplicate() == false) {
      counter++;
   }
}