Есть ли способ получить данные заголовков событий (EventHub) с помощью @EventHubTrigger функций Azure в Java?

У меня есть функция Azure, реализованная с помощью библиотеки azure-functions-java-library, которая получает события от одного EventHub, и я использую @EventHubTrigger, проблема в том, что мне нужны данные заголовка из события, но я не вижу способа получить это, я уже прочитал документы и ничего. Причина, по которой мне это нужно, заключается в том, что из EventHub я получаю события с разными схемами Avro, поэтому мне нужно различать их, чтобы проанализировать их.

Буду очень признателен за помощь.

1 ответ

Решение

Да, вы можете получить метаданные сообщения, добавив @BindingName("Properties")аннотация к параметру метода, например, как показано ниже. Здесь следует отметить, что вы можете привязать к любым метаданным события, используя выражение привязки. В данном случае это "Свойства". Кроме того, мощность должна быть ОДНА.

@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 в качестве отправителя событий, чтобы установить метаданные события, как показано ниже, и смог увидеть их на стороне потребителя, используя приведенный выше код в привязке "Свойства".

NB. SDK функций C# имеет здесь преимущество перед Java. В C# вы можете получить весь объект Event, по которому легче ориентироваться для метаданных напрямую, получая несколько событий на входе. Но, к сожалению, на данный момент это невозможно в Java SDK, где вам нужно связывать отдельно с одной мощностью.

Другие вопросы по тегам