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