设备命令和异步通知的重试模式

问题描述

这是我正在研究的用例。

我有几个基于 LoRa 的设备连接到 Thingsnetwork 服务器。这些设备用于开/关灯。我正在使用 Azure 函数通过 thingsnetwork http api 和发送下行链路命令将命令发送到设备(例如打开灯)。

当我从一个 azure 功能发送打开灯的命令时,它会转到 ttn 服务器 -> 网关 -> 设备。 设备将响应作为单独的上行链路命令作为对命令的响应。这将触发单独的 Azure 函数,其中接收到灯光状态。

现在想实现重试,分两种情况-

  1. 如果发送命令打开灯 - 但设备上传灯状态为关闭。然后我需要再次向该设备发送 ON 命令。
  2. 如果发送了打开灯的命令 - 并且在 X 秒内没有收到来自设备的响应,那么我需要再次向该设备发送 ON 命令。

我正在使用 Azure 技术堆栈 - Azure 事件中心、服务总线、Azure 函数等。

有人可以建议从设备实现此类异步通知的最佳实践以及我们如何实现重试模式吗?

解决方法

azure 函数可以包含多个输入绑定或输出绑定。

也许您可以使用两个功能,一个功能将消息发送到事件中心等某些服务以在灯状态为假时保存消息,如果在 X 秒内您没有收到任何消息,则重新发送到设备。还有一个由事件中心的消息触发的功能,如果在 X 秒内没有收到任何消息,也会重新发送到设备等。