首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检索IoT集线器数据的属性,而不仅仅是实际有效负载

如何检索IoT集线器数据的属性,而不仅仅是实际有效负载
EN

Stack Overflow用户
提问于 2019-04-29 19:15:21
回答 1查看 1.2K关注 0票数 3

我有一个iot-hub,它接收JSON和非json(十六进制)消息。这些都会转到我的Java函数应用程序来解码。基于device-id,我调用了一个不同的解码器。

我正在尝试获取我正在接收的消息的实际iothub-connection-device-id

代码语言:javascript
运行
复制
public class TranslateEndpoint {
    /**
     * This function will be invoked when an event is received from Event Hub.
     */
    @FunctionName("TranslateEndpoint")
    public void run(
        @EventHubTrigger(name = "message", eventHubName = "NAME-DeviceIntegration", connection = "HostName=HOST;SharedAccessKeyName=NAME;SharedAccessKey=KEY=", consumerGroup = "$Default", cardinality = Cardinality.ONE) EventData message,
        final ExecutionContext context
    ) {
        context.getLogger().info("Java Event Hub trigger function executed.");
        context.getLogger().info("Length:" + message.toString());
        TranslateController temp = new TranslateController();

        // Build up a list with all the data

        context.getLogger().info(message.getSystemProperties().getPublisher());
        context.getLogger().info(message.getSystemProperties().getPartitionKey());
        context.getLogger().info(message.getSystemProperties().get("iothub-connection-device-id").toString());
    }

上面的代码是受我发现的一些C#代码的启发。不幸的是,我得到了一个错误Stack: java.lang.RuntimeException: Unable to invoke no-args constructor for interface com.microsoft.azure.eventhubs.EventData. Registering an InstanceCreator with Gson for this type may fix this problem.

在我使用String并且只得到我的实际有效载荷之前。接收我的邮件的系统属性的正确方式是什么?

EN

回答 1

Stack Overflow用户

发布于 2019-05-11 21:34:26

至少在Java中,元数据属性必须通过附加的带注释的参数来提取,在这种情况下:

代码语言:javascript
运行
复制
//The system properties, including the event data
@BindingName("SystemProperties") Map<String, Object> systemProperties

然后可以从该参数检索设备ID:

代码语言:javascript
运行
复制
String deviceId = (String) systemProperties.get("iothub-connection-device-id");

带有@EventHubTrigger注释的@EventHubTrigger参数应该是一个字符串,或者可能是一个字节数组。在这种情况下,POJO (或EventData )不能映射,因为备份数据只包含事件有效负载/值。

因此,函数应该如下所示:

代码语言:javascript
运行
复制
public class TranslateEndpoint {
    /**
     * This function will be invoked when an event is received from Event Hub.
     */
    @FunctionName("TranslateEndpoint")
    public void run(
            @BindingName("SystemProperties") Map<String, Object> systemProperties,
            @EventHubTrigger(name = "message", eventHubName = "NAME-DeviceIntegration", connection = "HostName=HOST;SharedAccessKeyName=NAME;SharedAccessKey=KEY=", consumerGroup = "$Default", cardinality = Cardinality.ONE) String message,
            final ExecutionContext context
    ) {
        String deviceId = (String) systemProperties.get("iothub-connection-device-id");
        //decode/parse message string
        //...
    }
}

文档:

我不得不说,文档可以不那么麻烦,就像所有支持的语言中的API可能更加一致一样。我可能还漏掉了什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55909511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档