我有一个使用 azure-functions-java-library 实现的 Azure 函数,它从一个 EventHub 接收事件,我正在使用 @EventHubTrigger,问题是我需要来自事件的标头数据,但我看不到任何获取方法这个,我已经阅读了文档,什么也没有。我需要这个的原因是因为我从 EventHub 接收具有不同 Avro 模式的事件,所以我需要区分它们以便解析它。
我真的很感激一些帮助。
我有一个使用 azure-functions-java-library 实现的 Azure 函数,它从一个 EventHub 接收事件,我正在使用 @EventHubTrigger,问题是我需要来自事件的标头数据,但我看不到任何获取方法这个,我已经阅读了文档,什么也没有。我需要这个的原因是因为我从 EventHub 接收具有不同 Avro 模式的事件,所以我需要区分它们以便解析它。
我真的很感激一些帮助。
是的,您可以通过向方法参数添加注释来检索消息元数据,@BindingName("Properties")
例如,如下所示。此处需要注意的事项,您可以使用绑定表达式绑定到事件的任何元数据。在这种情况下,它是“属性”。此外,基数应该是 ONE。
@FunctionName("EventHubExample")
public void logEventHubMessage(
@EventHubTrigger(name = "message", eventHubName = "test", connection = "AzureEventHubConnection", consumerGroup = "$Default", cardinality = Cardinality.ONE, dataType = "string")
String message,
final ExecutionContext context,
@BindingName("Properties")
Map<String, Object> properties) {
context.getLogger().info("Event hub message received: " + message + ", properties: " + properties);
}
我使用服务总线资源管理器作为事件发送者来设置事件的元数据,如下所示,并且能够在“属性”绑定中使用上述代码在消费者端看到这些元数据。
NB C# 函数 SDK 在这方面比 Java 有优势。在 C# 中,您可以获得整个 Event 对象,该对象更易于直接导航元数据,同时在输入中获取多个事件。但不幸的是,到目前为止,这在 Java SDK 中是不可能的,您必须使用单一基数单独绑定。