检测azure函数的超时,以将消息重新路由到应用服务计划

时间:2018-01-16 15:14:05

标签: c# azure-functions

我有一个Azure功能,在消费计划中解压缩档案。其中一些恰好需要超过10分钟来解压缩并且可以超时。我正在考虑制定一个单独的应用服务计划,我会在消费计划超时时重新路由提取。

你会怎么做?功能中的计时器?捕获超时异常?你有更好的建议吗?

由于

1 个答案:

答案 0 :(得分:3)

对于那些感兴趣的人,我结束了我自己的超时(比Azure一早几秒)添加到提取功能,然后重新路由到服务应用计划处理的另一个队列,而不是超时。

代码:

using (var timeoutCts = new CancellationTokenSource())
{
    try
    {
        // task completed within timeout
        timeoutCts.CancelAfter(590000);
        var counter = await ExtractArchiveAsync(archiveFullName, myBlob, timeoutCts.Token);
        log.Info($"Extracted : { counter.GetCurrentCount() }");
    }
    catch (OperationCanceledException)
    {
        // timeout logic
        log.Info($"Function timedout, redirected to long queue");
        var queue = StorageService.GetCloudQueueReference("ArchiveToExtractQueueTimedOut");
        await queue.AddMessageAsync(new CloudQueueMessage(archiveFullName));
    }
}