在 Azure IoT C SDK 中出现不可恢复的错误后重试
Retry after unrecoverable error in Azure IoT C SDK
根据 this documentation, the SDK does not reattempt a re-connection if it detects an unrecoverable error. However, in the associated documentation 对于 C SDK,没有提到可恢复或不可恢复的错误(或者至少我没有在那里找到它)。
我如何知道 SDK 当前是否处于最终可能恢复的状态或需要手动重新尝试重新连接的状态?
如果重试策略决定不重新尝试重新连接,是否可以在不破坏设备句柄并创建新句柄的情况下手动重新连接(例如 IoTHubDeviceClient_CreateFromConnectionString
)?
C SDK
目前不区分重试角度的不可恢复错误和可恢复错误。
所有类型的故障都被视为可能恢复的可恢复故障 - 因此应修复文档以反映当前功能 2018_11_20 release
.
也就是说,SetConnectionStatusCallback
将 return 适当的原因代码,这有助于确定是否应允许 SDK 重试或是否需要建立新连接由应用程序。
例如,我认为 IOTHUB_CLIENT_CONNECTION_BAD_CREDENTIAL
是我应用程序的设备客户端的不可恢复错误。
你说得对 - 需要创建一个新的设备句柄才能手动重新尝试连接。这是因为所有 C SDK APIs
关闭此句柄以查询 iothub_device_client
内的各种设备客户端状态。
根据 this documentation, the SDK does not reattempt a re-connection if it detects an unrecoverable error. However, in the associated documentation 对于 C SDK,没有提到可恢复或不可恢复的错误(或者至少我没有在那里找到它)。
我如何知道 SDK 当前是否处于最终可能恢复的状态或需要手动重新尝试重新连接的状态?
如果重试策略决定不重新尝试重新连接,是否可以在不破坏设备句柄并创建新句柄的情况下手动重新连接(例如
IoTHubDeviceClient_CreateFromConnectionString
)?
C SDK
目前不区分重试角度的不可恢复错误和可恢复错误。所有类型的故障都被视为可能恢复的可恢复故障 - 因此应修复文档以反映当前功能
2018_11_20 release
.也就是说,
SetConnectionStatusCallback
将 return 适当的原因代码,这有助于确定是否应允许 SDK 重试或是否需要建立新连接由应用程序。例如,我认为
IOTHUB_CLIENT_CONNECTION_BAD_CREDENTIAL
是我应用程序的设备客户端的不可恢复错误。你说得对 - 需要创建一个新的设备句柄才能手动重新尝试连接。这是因为所有
C SDK APIs
关闭此句柄以查询iothub_device_client
内的各种设备客户端状态。