获取从 AWS IOT CORE 到 AWS Lambda .Net Core 的 MQTT 主题名称

Get MQTT Topic name coming from AWS IOT CORE to AWS Lambda .Net Core

我需要帮助。 所以我需要从 AWS Lambda 获取从 AWS IOT CORE 订阅(触发)的主题名称。 所以这是我的 lambda 代码:

        public string FunctionHandler(Gps message, ILambdaContext context)
    { 
        LambdaLogger.Log("STRING MESSAGE DT: " + message.dt);
        LambdaLogger.Log("STRING MESSAGE LN: " + message.ln);
        LambdaLogger.Log("STRING MESSAGE LT: " + message.lt);
        LambdaLogger.Log("input context: " + context.FunctionName);
        LambdaLogger.Log("input context: " + context.Identity);
        LambdaLogger.Log("input context: " + context.InvokedFunctionArn);
        LambdaLogger.Log("input context: " + context.FunctionName);
        LambdaLogger.Log("input context: " + context.AwsRequestId);
        LambdaLogger.Log("input context: " + context.ClientContext);
        LambdaLogger.Log("input context: " + context.Logger);
        LambdaLogger.Log("input context: " + context.LogStreamName);
        return JsonConvert.SerializeObject(gpsList);
    }

我在云表中看到,我正确地收到了来自 MQTT 的有效负载数据并正确地触发了。 所以这是我的主题:

AWS/#

这是我的负载(地理位置对象 json)发布在 AWS/Test

{
        "dt": "2020-02-26 18:03:30",
        "lt": "xxx.xxx",
        "ln": "yyy.yyy"
}

我的 aws iot 核心规则:

SELECT *, topic() as Topic FROM 'AWS/#'

这是我来自 AWS CloudWatch 的日志

2021-04-20T09:26:48.457+02:00   STRING MESSAGE DT: 2020-02-26 18:03:30

2021-04-20T09:26:48.473+02:00   STRING MESSAGE LN: xxx.xxx

2021-04-20T09:26:48.473+02:00   STRING MESSAGE LT: yyy.yyy

如您所见,我已正确接收到所有数据,但是,我需要阅读主题名称。 在这种情况下我需要阅读 AWS/Test

我需要,因为该主题将包含机器序列号等基本信息,例如 'AWS/xyz'。 如何从发布的 MQTT 读取主题名称和读取 'xyz'?我需要在 AWS Lambda 中获取主题名称。 无法将串口机插入payload,只能在publish topic的命名上。

您需要将 .Topic 属性添加到您的 Gps class。 lambda 收到的事件如下所示:

{
  "dt": "2020-02-26 18:03:30",
  "lt": "xxx.xxx",
  "ln": "yyy.yyy"
  "Topic: "your topic here"
}