azure - 在 Azure IoT C SDK 出现不可恢复的错误后重试
问题描述
根据此文档,如果 SDK 检测到不可恢复的错误,它不会重新尝试重新连接。但是,在C SDK的相关文档中没有提到可恢复或不可恢复的错误(或者至少我没有在那里找到它)。
如何确定 SDK 当前是否处于最终可能恢复的状态或需要手动重新尝试重新连接的状态?
如果重试策略决定不重新尝试重新连接,是否可以在不破坏设备句柄并创建新句柄的情况下手动重新连接(例如使用
IoTHubDeviceClient_CreateFromConnectionString
)?
解决方案
当前
C SDK
不从重试的角度区分不可恢复和可恢复的错误。所有类型的故障都被视为可以恢复的可恢复故障,因此应修复文档以反映当前功能
2018_11_20 release
。也就是说,
SetConnectionStatusCallback
将返回适当的原因代码,这有助于确定是否应允许 SDK 重试,或者应用程序是否需要建立新连接。例如,
IOTHUB_CLIENT_CONNECTION_BAD_CREDENTIAL
对于我的应用程序的设备客户端,我认为这是一个不可恢复的错误。你是对的 - 需要创建一个新的设备句柄才能手动重新尝试连接。这是因为所有
C SDK APIs
关闭此句柄以查询iothub_device_client
.
推荐阅读
- excel - 从执行时定义的一系列单元格中复制与内部颜色匹配的单元格(ExcelVBA)
- javascript - 在样式化组件中使用扩展运算符
- haskell - 为什么我的 Haskell 命令行程序没有从 Vim Bang 获得参数?
- javascript - 如何链接连续的 AJAX 调用并在它们之间传递值?
- angular - 角度路由器延迟加载:以相同路径开头的两个不同模块
- java - 警报管理器在除周日之外的每天特定时间推送通知,并在触发时禁用推送以显示
- azure - 使用现有应用程序进行 Azure AD 身份验证
- javascript - 根据其中的文本更改元素的颜色
- scala - 在 Scala 中使用参数动态实例化对象 - asInstanceOf 不接受参数
- c++ - 可以将容器的复制构造函数定义为不可复制值类型的删除吗?