Повторите попытку после неисправимой ошибки в Azure IoT C SDK.

Согласно этой документации SDK не предпринимает повторных попыток повторного подключения, если обнаруживает неисправимую ошибку. Однако в сопутствующей документации для C SDK нет упоминания об исправимой или неисправимой ошибке (по крайней мере, я ее там не нашел).

  • Как я могу узнать, находится ли SDK в настоящее время в состоянии, когда он может в конечном итоге восстановиться или когда требуется повторная попытка повторного подключения вручную?

  • Если политика повторных попыток решает не предпринимать повторных попыток повторного подключения, можно ли выполнить повторное подключение вручную, не уничтожая дескриптор устройства и создавая новый (например, с IoTHubDeviceClient_CreateFromConnectionString)?


person koalo    schedule 04.12.2018    source источник


Ответы (1)


  • В настоящее время C SDK не делает различий между неисправимыми и исправимыми ошибками с точки зрения повторных попыток.

  • Все типы сбоев рассматриваются как восстанавливаемые сбои, которые потенциально могут быть устранены, поэтому документация должна быть исправлена, чтобы отражать текущую функциональность 2018_11_20 release.

  • Тем не менее, SetConnectionStatusCallback вернет соответствующие коды причин, которые могут помочь определить, следует ли разрешить SDK повторить попытку или приложение должно установить новое соединение.

  • Например, я бы рассматривал IOTHUB_CLIENT_CONNECTION_BAD_CREDENTIAL как неисправимую ошибку для клиента устройства моего приложения.

  • Вы правы - необходимо создать новый дескриптор устройства для повторной попытки подключения вручную. Это связано с тем, что все C SDK APIs ключи от этого дескриптора запрашивают различные состояния клиента устройства в пределах iothub_device_client.

person massand    schedule 05.12.2018
comment
Полезно знать, спасибо! И как мне тогда установить initial_wait_time_in_secs? - person koalo; 05.12.2018
comment
В настоящее время я вижу, что он жестко запрограммирован либо на 1 секунду (экспоненциальные режимы повтора), либо на 5 секунд (другие режимы повтора), потому что ничто другое не устанавливает параметр повтора с именем RETRY_CONTROL_OPTION_INITIAL_WAIT_TIME_IN_SECS. Если это требуется для раскрытия в определенных сценариях, отправьте сообщение о проблеме на Github. Спасибо! - person massand; 09.12.2018
comment
Спасибо! Я видел, что для этого запроса функции уже есть проблема: github.com /Azure/azure-iot-sdk-c/issues/731 - person koalo; 10.12.2018