【问题标题】:Handling errors/failures occurred in Azure Durable Functions called by queue-triggered Azure Functions处理队列触发的 Azure Functions 调用的 Azure Durable Functions 中发生的错误/故障
【发布时间】:2019-11-09 17:48:43
【问题描述】:

我们有一个 Azure 存储队列,一旦有效负载/消息到达队列,它就会触发一个 azure 函数。队列触发函数调用另一个持久函数来处理消息/有效负载。

这里是代码sn-p:

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

【问题讨论】:

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


    【解决方案1】:

    你不能。

    QueueTriggerFunction 只是启动 Orchestration。之后,它的生命周期结束。

    我相信您可以使用 Azure Storage Services REST API.Net library 直接将您的有效负载添加到毒物队列中

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-10
      • 2019-12-16
      • 2018-12-17
      • 2017-10-29
      • 2022-01-19
      • 1970-01-01
      • 2017-10-09
      • 2021-01-01
      相关资源
      最近更新 更多