处理 errors/failures 发生在由队列触发的 Azure Functions 调用的 Azure Durable Functions 中

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

我们有一个 Azure 存储队列,一旦 payload/message 到达队列就会触发一个 azure 函数。队列触发函数调用另一个持久函数来处理 message/payload.

这是代码片段:

        [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 方法失败时引发上述异常,我希望负载最终进入毒消息队列,但实际上并没有发生,因为异常不会通过协调器冒泡客户。关于如何将此异常抛回给调用者函数的任何建议,调用者函数是队列触发的,以使有效负载出现在毒消息队列中?

你不能。

QueueTriggerFunction 刚刚开始Orchestration。之后它的生命周期结束。

我相信您可以使用 Azure Storage Services REST API or this .Net library

直接将有效负载添加到毒物队列

请注意毒药队列的名称== $"{queueName}-poison"