#azure-functions #azure-eventgrid #azure-durable-functions
#azure-функции #azure-сетка событий #azure-долговечные-функции
Вопрос:
У нас есть много файлов, которые создаются в хранилище больших двоичных объектов, и, следовательно, мы передаем эти файлы функциям Azure. Однако с помощью функции Azure и триггера сетки событий время ожидания истекло после определенного нет. количество файлов было обработано. Поэтому сейчас я пытаюсь использовать долговременные функции.
Ниже приведен код, который я пробовал.
Запускается ProcessJob_EventGrid. Однако ProcessJob_Orchestrator никогда не запускается. Есть ли что-то, чего мне не хватает.
Я совершенно новичок в концепции долговременных функций.
[FunctionName("ProcessJob_Orchestrator")]
public async Task RunOrchestrator(
[OrchestrationTrigger] IDurableOrchestrationContext context, ILogger log)
{
log.LogInformation($"************** RunOrchestrator method executing ********************");
var data = context.GetInput<string>();
log.LogInformation($"File Name is {data}.");
//// Replace "hello" with the name of your Durable Activity Function.
//outputs.Add(await context.CallActivityAsync<string>("MCNDataTransformation_Hello", "Tokyo"));
//outputs.Add(await context.CallActivityAsync<string>("MCNDataTransformation_Hello", "Seattle"));
//outputs.Add(await context.CallActivityAsync<string>("MCNDataTransformation_Hello", "London"));
//// returns ["Hello Tokyo!", "Hello Seattle!", "Hello London!"]
//return outputs;
}
[FunctionName("MCNDataTransformation_Hello")]
public string SayHello([ActivityTrigger] string name, ILogger log)
{
log.LogInformation($"Saying hello to {name}.");
return $"Hello {name}!";
}
[FunctionName("ProcessJob_EventGrid")]
public static async void EventGridTest([EventGridTrigger] EventGridEvent eventGridEvent, [DurableClient] IDurableOrchestrationClient starter, ILogger log)
{
JObject objData = JObject.Parse(eventGridEvent.Data.ToString());
// Function input comes from the request content.
string instanceId = await starter.StartNewAsync("ProcessJob_Orchestrator", null, JsonConvert.SerializeObject(objData));
log.LogInformation(eventGridEvent.Data.ToString());
}
Комментарии:
1. Вы пробовали передавать реальный идентификатор экземпляра вызову StartNewAsync? Я не думаю, что идентификатор экземпляра может быть нулевым.
2. Единственная причина, по которой я передал значение null, заключается в том, что ожидаемый параметр — это идентификатор экземпляра.
Ответ №1:
Я являюсь членом команды разработчиков Durable Functions 🙂 Ничто сразу не выделяется как неправильное. Однако передача null
в качестве 2-го параметра StartNewAsync
немного подозрительна: если вы не пытаетесь вызвать определенный InstanceID , у вас не должно быть причин указывать это значение.
Как насчет того, чтобы попробовать переписать эту строку, чтобы быть:
// Do not specify instanceId argument if not needed.
string instanceId = await starter.StartNewAsync("ProcessJob_Orchestrator", JsonConvert.SerializeObject(objData));
Возможно, этого должно хватить. Пожалуйста, дайте мне знать, если это произойдет!
Если это не решит вашу проблему, есть несколько последующих шагов, которые вы можете предпринять.
- Локально проверьте предварительно скомпилированные образцы здесь: https://github.com/Azure/azure-functions-durable-extension/tree/dev/samples/precompiled Там попробуйте запустить простую оркестровку, например
HelloSequence
. Если вам удастся запустить его, попробуйте изменить его в соответствии с вашим вариантом использования. - Если ни один из вышеперечисленных советов не сработает, откройте тикет в https://github.com/Azure/azure-functions-durable-extension/issues и мы немедленно взглянем на это!
Комментарии:
1. Единственная причина, по которой я передаю null, заключается в том, что второй параметр ожидает идентификатор экземпляра, поэтому я передал его как null, но если я его удалю, я получу следующую ошибку ———————————-2020-11- 26T07:27:55.995 [Ошибка] Выполнен ‘ProcessJob_EventGrid’ (сбой, идентификатор = 6f1fefbe-c9e7-4550-8b47-7969226b39dc, длительность = 18 мс)InstanceID (параметр ‘Идентификаторы экземпляра оркестровки не должны содержать /, , #, ?, или элемент управлениясимволы.’)
2. Я пробовал со всеми приведенными ниже комбинациями 3. string InstanceID = ожидает запуска. StartNewAsync(«HelloWorld»); string InstanceID = ожидает запуска. StartNewAsync(«HelloWorld»,JsonConvert.SerializeObject(objData)); — Строка ошибки InstanceID = ожидает запуска. StartNewAsync(«HelloWorld», null , JsonConvert.SerializeObject(objData));
3. С какой версией
Microsoft.Azure.WebJobs.Extensions.DurableTask
вы работаете? Кроме того, можете ли вы локально запустить образец, который я перечислил выше?4. Версия для Microsoft. Azure. Веб-задания. Расширения. DurableTask — 2.1.1 . Предоставленный вами образец предназначен для Httptrigger, и он уже работает и для меня. Однако для триггера события возникает проблема, при которой оркестровка не запускается.
5. Я вижу, я понимаю, что вы имеете в виду. Пожалуйста, рассмотрите возможность открытия проблемы здесь: github.com/Azure/azure-functions-durable-extension/issues и я уведомлю остальных членов команды, чтобы они попытались докопаться до сути!