1

我是 greengrass 核心应用程序的初学者,并按照 greengrass 开发人员指南完成了演示设置。但我仍然对 lambda 函数的工作原理感到困惑。下面是我想寻求帮助的问题。

我想在我的树莓派 3 中运行一个 lambda 函数作为 greengrass 核心,它可以接收多个 IoT 设备的 MQTT 消息并根据任务 tpye(即各种信号过滤或家用机器学习算法)进行一些处理。处理后,我需要使用 MQTT 将信息发送到我自己的服务器(不是 AWS IoT 云),以便对某些主题进行更高级别的处理。

我的问题如下(我想使用JAVA语言): 1要接收连接到GGC的多个aws iot设备,我是否需要在aws-iot-device-sdk-java中设置AWSIoTMQTTClient?我还在 aws_greengrass_core_sdk_java 中找到了“IotDataClient”类,它有什么用?AWSIoTMQTTClient 有什么不同。这里真的很混乱,即使有 sdk 文档描述。

2 在 GGC 中,当我部署我的 lambda 函数时,它是否有一个内部 MQTT 代理来接收 AWSIoTMQTTClient 的消息?

3 对于 lambda 函数,在 GGC 上创建和部署后,它会开始工作。我看到有一种方法可以从 lambda 函数调用另一个 lambda 函数。我不明白 lambda 的工作原理。

4 我可以有多个不同用途的lambda函数,例如,一个只接收MQTT消息,另一个是处理接收到的信息,另一个是将处理后的信息发送到我自己的MQTT服务器?如果允许,如何使工作一起执行所有任务。

5 我看到 lambda 接口有事件输入,只有当某些特定主题到达 lambda 函数中定义的 AWSIoTMQTTClient 时,我如何才能调用 lambda?

6 下面是 JAVA lambda 接口模板: outputType handler-name(inputType input, Context context) { ... } 我认为它应该允许用户根据需要定义输入数据类型。但问题是如果我定义输入类型是字符串。如何让 lambda 处理程序接收字符串。开发指南没有明确的描述。

7 最后,能否请您分享一些上述问题的演示代码?

感谢您的关注和提前帮助。非常期待您的帮助

4

1 回答 1

0

设备开发工具包中的 AWSIoTMQTTClient 不适用于 Greengrass Lambda 函数。而是使用 Greengrass Java SDK 中的 IotDataClient,创建发布请求,然后调用发布方法。这里有一个例子 - https://github.com/aws-samples/aws-greengrass-lambda-functions/blob/master/foundation/CDDBaselineJava/src/main/java/com/timmattison/greengrass/cdd/通信/GreengrassCommunication.java

AWSIoTMQTTClient 适用于在 Greengrass 之外运行的设备/应用程序。

如果您想在 Java 中查看一些示例 Greengrass Lambda 函数代码,请至少查看这个框架示例 - https://github.com/aws-samples/aws-greengrass-lambda-functions/tree/master/functions/CDDSkeletonJava . 请注意,此功能和 repo 中的其他功能依赖于一个名为 CDD(云设备驱动程序)的框架。它在同一个 repo 中共享,并完成大部分繁重的工作(消息传递、启动等)。结合 Greengrass 供应商 - https://github.com/awslabs/aws-greengrass-provisioner - 为您提供了一种在 Greengrass 上开发 Java 功能的快速方法。如果您尝试一下,请告诉我。

如果您想查看 CDD 的内部结构,它的根源在这里 - https://github.com/aws-samples/aws-greengrass-lambda-functions/tree/master/foundation/CDDBaselineJava

至于 Lambda 函数以及它们如何短暂运行,我会说它们可以按需运行(当它们收到消息时)或者它们可以“固定”运行(永远)。固定函数也可以接收消息。当您需要跟踪某种状态时,固定函数非常有用。按需功能对于无状态数据处理更有效。

于 2019-02-12T21:04:18.513 回答