Обработка ошибок / сбоев, возникающих в долговременных функциях Azure, вызываемых вызываемыми очередью функциями Azure - PullRequest
0 голосов
/ 27 июня 2019

У нас есть Azure Storage Queue, которая запускает функцию Azure, когда полезная нагрузка / сообщение попадает в очередь.Функция, запускаемая очередью, вызывает другую долговременную функцию для обработки сообщения / полезной нагрузки.

Вот фрагмент кода:

        [FunctionName("QueueTriggerFunction")]
        public Task QueueTriggerFunction(
            [QueueTrigger("MyQueue", Connection = "MyStorage")]string item,
            [OrchestrationClient] DurableOrchestrationClient client,
            ILogger log)
            => client.StartNewAsync("Processor", JsonConvert.DeserializeObject<MyObject>(item));

И эта долговечная функция выглядит как следующий пример кода:

[FunctionName("Processor")]
        public async Task ConcurrencyProcessorAsync(
            [OrchestrationTrigger] DurableOrchestrationContext context,
            ILogger log)
        {
            var myObject= context.GetInput<MyObject>();

            if(ObjectProcessor(myObject) == false)
            {
                throw new Exception("Processor failed");
            }
        }

Я бы хотел, чтобы полезная нагрузка попала в очередь ядовитых сообщений, если вышеупомянутое исключение возникает при сбое метода ObjectProcessor, но в действительности это не происходит, потому что исключение не всплывает черезоркестровщик клиент.Любые предложения о том, как сделать это исключение обратно в функцию вызывающей стороны, которая запускается из очереди, чтобы полезные данные появлялись в очереди подозрительных сообщений?

1 Ответ

1 голос
/ 28 июня 2019

Вы не можете.

QueueTriggerFunction просто запускает Orchestration. После этого его жизненный цикл заканчивается.

Я полагаю, что вы можете напрямую добавить свою полезную нагрузку в очередь отравления, используя API-интерфейс REST Azure Storage Services или эту .Net библиотеку

Обратите внимание, что имя очереди ядов == $"{queueName}-posion"

...