问题描述
我想知道 IoThub 是否会在事件网格消息失败时通知设备? 这是架构流程:
设备->IoTHub->EventGrid->Webhook
因此,当 EevntGrid 出现错误(例如由于某种原因导致 400/500 错误)时,IoThub 是否会在设备可以重试时通知设备此故障,或者是否发送收到的消息,设备会认为该消息已经成功发送到 Webhook 了吗?是否有工作流程/设计可以让我们将此错误通知给设备?
解决方法
因此,当 EevntGrid 出现错误(例如由于某种原因导致 400/500 错误)时,IoThub 是否会在设备可以重试时通知设备此故障,或者是否发送收到的消息,设备会认为该消息已成功发送至 Webhook?
不,它是一个异步流。不会有任何云到设备消息告诉设备发生故障。至少不是开箱即用的。此外,重试逻辑已存在于事件网格中,除非设备无法与 IoT 中心通信,否则无需重试消息。
是否有工作流程/设计可以通知设备此错误?
以这个例子为例:
- 设备发送遥测数据
- IoT 中心接收消息并将其传递给事件网格
- 事件网格尝试传递事件
- 事件传递因暂时性错误而失败
- 事件网格在给定时间段内重试事件传递 n 次
- 事件已成功传递或死信
- 在成功传递的情况下,消息由端点处理。
现在,云到设备消息只能在第 6 步(或第 7 步,如果您想包括最终端点的响应)发送。步骤 1 和 6/7 之间可能有几毫秒,也可能有几分钟、几小时甚至几天(在最坏的情况下,取决于重试配置和端点状态)。
合乎逻辑的是让端点发布自己的事件并将其传送到云设备,但这将是一个异步流程。
为什么要让设备承担消息传递的结果?我认为它不必担心流量,除非它无法与 IoT Hub 通信。