处理由队列触发的Azure函数调用的Azure持久函数中发生的错误/失败

时间:2019-06-27 16:48:41

标签: azure azure-functions azure-queues azure-durable-functions

我们有一个Azure存储队列,一旦负载/消息到达队列,该队列就会触发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 个答案:

答案 0 :(得分:1)

你不能。

QueueTriggerFunction仅启动Orchestration。之后,生命周期结束。

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

将您的有效载荷直接添加到中毒队列中

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