有没有一种方法可以使用Java中Azure函数的@EventHubTrigger获取事件EventHub的标头数据?

问题描述

我有一个通过azure-functions-java-library实现的Azure函数,该函数从一个EventHub接收事件,而我正在使用@EventHubTrigger,问题是我需要来自事件的标头数据,但看不到任何实现此目的的方式,我已经阅读了文档,什么也没有。我需要这个的原因是因为我从EventHub接收具有不同Avro模式的事件,所以我需要区分它们以便对其进行解析。

非常感谢您的帮助。

解决方法

是的,例如,您可以通过向方法参数中添加@BindingName("Properties")批注来检索消息元数据,例如如下所示。这里需要注意的事情是,您可以使用binding expression绑定到事件的任何元数据。在这种情况下,它就是“属性”。另外,基数应为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);
    }

我使用Service Bus Explorer作为Event Sender来设置事件的元数据,如下所示,并且能够使用上述“属性”绑定中的代码在消费者端看到这些元数据。 enter image description here

C#函数SDK比Java具有优势。在C#中,您可以获得整个Event对象,当在输入中获取多个事件时,可以更轻松地直接导航元数据。但是不幸的是,到目前为止,在Java SDK中这是不可能的,您必须使用单个基数分别进行绑定。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...