#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)
{
path EventHubName — имя центра событий. Можно ссылаться через настройки приложения %eventHubName%
Комментарии:
1. Спасибо за это, это сработало с использованием %eventHubName%, но соединение должно быть с использованием @»EventHubConnectionString». Таким образом, случайным образом один должен использовать %, а другой — @ . Сбивает с толку, но это работает. Спасибо за вашу помощь.
2. ДА.. Это верно в отношении случайности, но именно об этом говорится в документации 🙂