【发布时间】:2020-04-23 06:31:25
【问题描述】:
根据 Google IoT 文档,网关设备充当存储和处理来自设备的数据的设备。但在 MQTT 网关示例中,我找不到网关如何存储数据。因此,我想知道网关和云之间的连接是否会丢失一段时间,这会导致设备消息丢失吗?这在实践中是如何处理的?
【问题讨论】:
标签: google-cloud-iot
根据 Google IoT 文档,网关设备充当存储和处理来自设备的数据的设备。但在 MQTT 网关示例中,我找不到网关如何存储数据。因此,我想知道网关和云之间的连接是否会丢失一段时间,这会导致设备消息丢失吗?这在实践中是如何处理的?
【问题讨论】:
标签: google-cloud-iot
将 Cloud IoT 网关视为您负责编写(或采购)的应用程序。网关不是 Google 提供的“实现”,而是 GCP Cloud IoT 的架构组件。它通常用作没有本地 Internet 网络功能的设备的代理。例如,蓝牙设备无法直接连接到云端,但它可能能够连接到同时支持蓝牙并可以访问互联网的设备。
假设您的设备 (D) 无法访问互联网,但希望发布遥测数据。它确实具有连接到网关设备 (G) 的能力,该设备可能是计算机或某些更丰富的硬件。 D 和 G 如何通信不在故事范围内……例如,它可能是蓝牙或串行或 USB 或其他东西。然后我们假设 G 能够从 D(或多个设备)接收数据。当 G 收到数据时,它将通过 MQTT 连接执行 MQTT 发布请求到 GCP Cloud IoT。此发布请求来自 G,但将 D 标识为源。
现在回答您的问题...如果 G 无法成功发送发布,则取决于您的本地逻辑(以及您自己的 G 实现)您所做的事情。您的逻辑可能会将请求本地存储在 G 并在将来重试,它可能会丢弃或者它可能会向 D 报告错误,而 D 本身可能会在将来重试。都是有效的可能性。
【讨论】:
当网关失去与 GCP 的连接时,根据您的实现,GCP 客户端通常会断开网关并等待它重新连接。在网关的基本情况下,它不应该保存任何东西,它应该只是充当可以代表无法使用 MQTT 或 HTTP 连接到云的设备与云对话的设备。
例如,如果您有许多具有 BLE 功能但没有 HTTP/MQTT 的设备,您可以使用网关将这些设备的数据发送到云端。
对于您的情况,如果您担心在网关未连接时丢失消息,您可以实现某种保存代码,在网关断开连接以及网关重新连接时将消息存储在 JSON 文件中将在新消息之前发送这些消息。这可能不是最好的实现,因为您会遇到积压的消息。
【讨论】: