Search code examples
azureazure-functionsazure-queuesazure-durable-functions

Handling errors/failures occurred in Azure Durable Functions called by queue-triggered Azure Functions


We have an Azure Storage Queue which triggers an azure function once a payload/message hits the queue. The queue-triggered function invokes another durable function to process the message/payload.

Here it is the code snippet:

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

And the durable function looks like the following code sample:

[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");
            }
        }

I'd like the payload to end up in the poison messages queue if the exception above is raised upon failing the ObjectProcessor method but it's not happening in reality because the exception does not bublle up through the orchestrator client. Any suggestions on how to make this exception thrown back to the caller function which is a queue-triggered one to make the payload appear in the poison messages queue?


Solution

  • You can't.

    The QueueTriggerFunction just starts the Orchestration. After that it's life cycle ends.

    I believe you can directly add your payload to poison queue using either Azure Storage Services REST API or this .Net library

    Please note that name of poison queue == $"{queueName}-poison"