Функция запуска EventHub для получения настроек приложения формы имени EventHub

#c# #azure #azure-eventhub

#c# #azure #azure-eventhub

Вопрос:

Почему триггер EventHub, написанный на C # (не C # Script), принимает некоторые значения из настроек приложения, но не все?

Я настроил функцию запуска EventHub следующим образом,

 [FunctionName("MyFristTriggerFunction")]
public static void MyFristTriggerFunction(
    [EventHubTrigger("MyEventHub", Connection = @"EventHubConnectionString")] EventData[] events
    ILogger log)
{
    var exceptions = new List<Exception>();

    foreach (EventData eventData in events)
    {
        try
        {
            string messageBody = Encoding.UTF8.GetString(eventData.Body.Array, eventData.Body.Offset, eventData.Body.Count);

            log.LogInformation($"C# Event Hub trigger function processed a message: {messageBody}");
        }
        catch (Exception e)
        {
            // We need to keep processing the rest of the batch - capture this exception and continue.
            // Also, consider capturing details of the message that failed processing so it can be processed again later.
            exceptions.Add(e);
        }
    }
    // Once processing of the batch is complete, if any messages in the batch failed processing throw an exception so that there is a record of the failure.

    if (exceptions.Count > 1)
        throw new AggregateException(exceptions);

    if (exceptions.Count == 1)
        throw exceptions.Single();
}
  

Это отлично работает, если я передаю строковое значение — MyEventHub. Однако то, что я хотел бы сделать, это передать имя концентратора событий в качестве переменной, которую можно было бы использовать из настроек приложения, аналогично EventHubConnectionString. Если я изменю объявление,

 public static void MyFristTriggerFunction(
    [EventHubTrigger(@"EventHubAppSettings", Connection = @"EventHubConnectionString")] EventData[] events
    ILogger log)
{
  

Я получаю сообщение об ошибке, что не удалось найти фактический концентратор событий — «EventHubAppSettings». Это что-то, что должно быть жестко запрограммировано?

Ответ №1:

вы можете указать eventHubName следующим образом и настроить это свойство «evenHubName» в appsettings

 [FunctionName("MyFristTriggerFunction")]
public static void MyFristTriggerFunction(
    [EventHubTrigger("%eventHubName%", Connection = @"EventHubConnectionString")] EventData[] events
    ILogger log)
{
  

https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-hubs#trigger—configuration

path EventHubName — имя центра событий. Можно ссылаться через настройки приложения %eventHubName%

Комментарии:

1. Спасибо за это, это сработало с использованием %eventHubName%, но соединение должно быть с использованием @»EventHubConnectionString». Таким образом, случайным образом один должен использовать %, а другой — @ . Сбивает с толку, но это работает. Спасибо за вашу помощь.

2. ДА.. Это верно в отношении случайности, но именно об этом говорится в документации 🙂