Есть ли способ получить данные заголовков событий (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, где вам нужно связывать отдельно с одной мощностью.