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

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

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

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

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

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


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


Ответы (1)


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

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

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'));
    });
  }
};
person Michael Xu - MSFT    schedule 13.04.2018