isuue с iotedge отправить подтверждение обратного вызова - PullRequest
0 голосов
/ 15 октября 2019

Я отправляю данные телеметрии из модуля iotedge в облако Azure, и мне нужно подтвердить, что данные получены в облаке. Обнаружил, что я могу использовать для этого обратный вызов подтверждения.

Вот так я отправляю данные:

clientResult = IoTHubModuleClient_LL_SendEventToOutputAsync(iotHubModuleClientHandle, messageInstance->messageHandle, "output1", SendConfirmationCallback_dps, (void *)messageInstance);

И это моя функция обратного вызова:

void SendConfirmationCallback_dps(IOTHUB_CLIENT_CONFIRMATION_RESULT result, void* userContextCallback)
{

    printf("Confirmation[%zu] received for message with result = %d\r\n", messageInstance->messageTrackingId, result);
}

**Вопрос: Получу ли я сообщение об ошибке, если сеть не доступна при отправке данных? Я пропускаю что-то, что требуется для достижения моей цели? Мой код работает хорошо во всех других аспектах. **

Моя проблема: Переменная 'result', которая появляется в обратном вызове подтверждения, равна нулю ("IOTHUB_CLIENT_CONFIRMATION_OK"), даже если при отправке данных нет сети.

Характеристики платы: C SDK, Iotedge V1.0.8, Ubuntu 18.04, ARM32

1 Ответ

1 голос
/ 15 октября 2019

Когда вы отправляете данные телеметрии из вашего модуля в IoT Hub, вы фактически отправляете их в Edge Hub - еще один локальный модуль, который действует как прокси-сервер для IoT Hub и позволяет клиентам продолжать работу в автономном режиме. Затем Edge Hub перенаправит ваши данные в облако, как только сможет. Итак, результат успеха, который вы видите, означает, что данные были отправлены в Edge Hub. Ваши данные попадут в облако, но в этом сценарии нет встроенного способа получить подтверждающий обратный вызов из облака.

...