首页 > 解决方案 > 将消息发布到特定子文件夹

问题描述

我正在尝试使用 Google Cloud Platform 制作一个小物联网项目。

我在“IoT Core”部分创建了一个注册表和一个设备,并将注册表连接到一个默认主题。我还为该主题指定了三个子文件夹:“events”、“config”和“status”。现在,我想为传入消息连接一个“云功能”,但我找不到如何配置单个子文件夹来监控如何在“云发布/订阅”部分中发布消息。

所有文档都讨论了单个主题,所以....我是否缺少一些关于它如何工作的基本概念?

标签: google-cloud-platformgoogle-cloud-functionsiotgoogle-cloud-pubsub

解决方案


需要后退一步。你想对各种子文件夹做什么?这可能是对设备与云之间的通信方式的误解。

所以,有 3 个 MQTT 主题,它们是事件/配置/状态(不是状态)。那些根本不映射到 Pub/Sub 主题。它们都在 IoT Core 中单独处理。

事件是设备->云,并被放入您在创建注册表时指定的 Pub/Sub 主题中。设置子文件夹就是将遥测从同一设备拆分到多个位置进行处理。因此,例如,您有想要进入一个发布/订阅主题的临时数据,以及想要进入另一个主题的压力数据。处理此问题的另一种方法是将函数附加到主 pub/sub 主题,解析遥测数据,然后根据有效负载本身将 Pub/Sub 消息重新发布到不同的位置。

Config 是 Cloud->device,通过调用 IoT Core Admin SDK 来启动。如果您的设备订阅了 /config/ MQTT 主题,那么当某个外部实体向您的设备的 IoT Core 发送配置消息时,他们将在 MQTT 客户端的 on_message 处理程序上获得回调(确切的代码当然取决于所使用的库) .

状态是设备->云,但经过特殊处理,不会进入任何 Pub/Sub 主题。IoT Core Admin SDK 可以检索结果。这是设备报告其状态然后外部进程/应用程序获得该状态的一种方式,而无需回调设备本身。例如,当您的设备未保持连接时,这尤其有用,但您仍希望能够根据最后一个已知状态执行操作。

因此,您可以使用 Cloud Functions 的唯一一个是 /events/ 主题。这是通过部署 Cloud Function 并选择 Pub/Sub 发布事件挂钩作为该函数的触发机制,并将 IoT Core 的注册表 Pub/Sub 主题指定为事件源来完成的。然后,只要您的设备将遥测数据发布到 /events/ MQTT 主题,它就会发布到该 Pub/Sub 主题(我知道这很困惑,因为我们将它们都称为主题)并且 Cloud Function 将触发。

希望这能澄清发生了什么?还是我完全错过了这个问题?:)


推荐阅读