Чтение старых сообщений в очереди iothub из облака на устройство

У меня есть код node.js (сторона устройства), который прослушивает сообщения в очереди устройств в лазурном IotHub.

В следующем сценарии:

  1. код не работает
  2. на устройство отправлено сообщение.
  3. код начинает выполняться и прослушивает очередь.

Устройство не читает старое сообщение из очереди, просто если я отправлю новое сообщение - оно его прочитает.

Как я могу изменить код устройства, чтобы слушать старые сообщения?

Это не ожидаемое поведение. При подключении устройство должно получать все сообщения в своей очереди. Интересный способ узнать, является ли это ошибкой SDK, - установить для переменной DEBUG env значение «*» и просмотреть журналы, чтобы определить, отправлено ли сообщение службой и проглочено ли оно SDK, или оно даже не отправлено. сервисом. Наконец, в качестве хорошей практики SO, пожалуйста, рассмотрите возможность публикации своего кода и входа в вопрос после очистки секретов.

pierreca - MSFT 14.04.2018 19:12
0
1
570
1

Ответы 1

Вы можете просмотреть эту статью, чтобы понять Обмен сообщениями между облаком и устройством в Azure IoT Hub. На диаграмме, которая показывает график состояния жизненного цикла для сообщения из облака на устройство в Центре Интернета вещей, Центр Интернета вещей сохраняет сообщения из облака на устройство в очередях для каждого устройства. Устройства должны явно подтвердить завершение, чтобы Центр Интернета вещей удалил их из очереди. Такой подход гарантирует отказоустойчивость от сбоев подключения и устройств.

В документе, который представляет, как отправлять сообщения из облака на устройство с помощью Центра Интернета вещей для node.js, если сначала запустить SendCloudToDeviceMessage.js, сообщение будет поставлено в очередь, а затем при запуске SimulatedDevice.js (обратите внимание на модификацию функции connectCallback для обработки сообщений с помощью метода Полный ), клиент получит сообщения.

var connectCallback = function (err) {
if (err) {
  console.log('Could not connect: ' + err);
} else {
  console.log('Client connected');
  client.on('message', function (msg) {
      console.log('Id: ' + msg.messageId + ' Body: ' + msg.data);
      client.complete(msg, printResultFor('completed'));
    });
  }
};

Другие вопросы по теме