Orchestrator не запускается в надежной функции Azure

#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));
 

Возможно, этого должно хватить. Пожалуйста, дайте мне знать, если это произойдет!

Если это не решит вашу проблему, есть несколько последующих шагов, которые вы можете предпринять.

  1. Локально проверьте предварительно скомпилированные образцы здесь: https://github.com/Azure/azure-functions-durable-extension/tree/dev/samples/precompiled Там попробуйте запустить простую оркестровку, например HelloSequence . Если вам удастся запустить его, попробуйте изменить его в соответствии с вашим вариантом использования.
  2. Если ни один из вышеперечисленных советов не сработает, откройте тикет в 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 и я уведомлю остальных членов команды, чтобы они попытались докопаться до сути!