Azure IoT Hub,EventHub和函数

我有一个IoTHub路由,指向一个EventHub触发一个函数。

我有问题从事件对象获取DeviceId和其他IoT Hub属性,而没有明确将这些属性添加到有效内容中。

如果我将输入类型设置为string (或自定义类型):

public static void Run(string iotMessage, TraceWriter log) {
    log.Info($"C# Event Hub trigger function processed a message: {iotMessage}");
}

我只获得没有任何其他IoT Hub属性(如DeviceId,CorrelationId或MessageId)的有效负载。

我尝试将类型设置为EventData而不是:

public static void Run(EventData iotMessage, TraceWriter log) {
    log.Info($"C# Event Hub trigger function processed a message: {JsonConvert.SerializeObject(iotMessage)}");
}

现在我可以通过两个getter访问IoT Hub属性:Properties和SystemProperties。 例如,我可以像这样访问DeviceId iotMessage.SystemProperties["iothub-connection-device-id"] 。 但它不公开有效载荷。

那么,如何访问IoT Hub属性和有效负载?


如果您需要访问除有效负载以外的详细事件属性,则这是推荐的方式。 在不需要访问这些事件属性的情况下, string等的简单/默认绑定非常有用。 我们的运行时在幕后为您调用EventData.GetBytes() ,并将数据转换为您指定的输入类型。

我认为我们可以改进以促进这些情景。 我在我们的回购记录中记录了一个错误以跟踪此问题。


我错过了EventData文档中的一件事。 它有一个名为GetBytes()的方法,并将该主体作为字节数组返回。 同时获得物联网集线器属性和主体的示例:

public static async void Run(EventData telemetryMessage, TraceWriter log)
{
    var deviceId = GetDeviceId(telemetryMessage);
    var payload = GetPayload(telemetryMessage.GetBytes());

    log.Info($"C# Event Hub trigger function processed a message.  deviceId: { deviceId }, payload: { JsonConvert.SerializeObject(payload) }");
}

private static Payload GetPayload(byte[] body)
{
    var json = System.Text.Encoding.UTF8.GetString(body);
    return JsonConvert.DeserializeObject<Payload>(json);
}

private static string GetDeviceId(EventData message)
{
    return message.SystemProperties["iothub-connection-device-id"].ToString();
}

有一些即将到来的更新将简单地根据这个:

为许多重要的ServiceBus和EventHub消息/事件属性添加了第一类绑定数据支持。 对于EventHub:

  • PartitionContext
  • PartitionKey
  • 抵消
  • 序列号
  • EnqueuedTimeUtc
  • 属性
  • 系统属性
  • 对于ServiceBus:

  • DeliveryCount
  • DeadLetterSource
  • ExpiresAtUtc
  • EnqueuedTimeUtc
  • 的MessageId
  • 内容类型
  • 回复
  • 序列号
  • 标签
  • 的correlationID
  • 属性
  • 所以你应该能够绑定到这些属性以及有效载荷。

    链接地址: http://www.djcxy.com/p/38363.html

    上一篇: Azure IoT Hub, EventHub and Functions

    下一篇: Implications of defining a struct inside a function vs outside?