我们使用 azure-iot-device-mqtt node包将debian计算机连接到Azure IOT Hub . 我们注意到当互联网掉线时(即我们断开它) Device Explorer 认为设备仍然连接(大约10秒),并且在此期间被触发的消息不会到达设备(或排队) . 10秒后,它们出现在设备资源管理器队列中 . 此外,设备仍然认为它已连接且无法恢复连接 .

我们已经尝试过软件包版本1.1.17和1.2.1,并且两者都有相同的症状 .

var clientFromConnectionString = require('azure-iot-device-mqtt').clientFromConnectionString;
var Message = require('azure-iot-device').Message;

var connectionString = 'xxx';

var client = clientFromConnectionString(connectionString);
var connectCallback = function (err) {
  if (err) {
    console.error('Could not connect: ' + err);
  } else {
    console.log('Client connected');
    var message = new Message('some data from my device');
    client.sendEvent(message, function (err) {
      if (err) console.log(err.toString());
    });

    client.on('message', function (msg) { 
      console.log(msg); 
      client.complete(msg, function () {
        console.log('completed');
      });
    });

    client.on('disconnect', function () { 
      console.log("disconnect");
    });
  }
};
client.open(connectCallback);

N.b我们需要MQTT,因为我们正在使用直接方法功能 .

在任何断开连接时,使用AMQP包,来自 Cloud 的消息立即进入队列 .

问题摘要:

  • MQTT消息在断开连接的前10-15秒内丢失(此后它们排队 Cloud 端) .

  • MQTT AMQP客户端未检测到断开连接 .

任何建议将不胜感激 .

谢谢,大卫