繁体   English   中英

Azure Function完成时间长怎么办?

[英]What to do when Azure Function takes long time to complete?

我是 Azure 函数的新手,正在尝试做一个新项目。 当我的 function 处理数据的时间过长时,我遇到了一些问题。 我正在使用 BlobTrigger,每次有人上传新的 Blob 时,我都需要 Blob 中的数据来使用其他 Microsoft 服务分析某些内容。

这是我的 Azure Function 的代码:

[StorageAccount("BlobConnectionString")]
public class AnalyzeAzureBlob
{
    private readonly IAnalyzeResult analyzeResult;

    public AnalyzeAzureBlob(IAnalyzeResult analyzeResult)
    {
        this.analyzeResult = analyzeResult;
    }
    [FunctionName("AnalyzeAzureBlob")]
    public void Run(
        [BlobTrigger("samples-analyze/{name}")]Stream inputBlob,
        [Blob("analyzed/{name}", FileAccess.Write)] Stream outputBlob,
        string name,
        ILogger log)
    {

        log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {inputBlob.Length} Bytes");

        try
        {
            this.analyzeResult.AnalyzeData(inputBlob, outputBlob);
            log.LogInformation("The file has been analyzed");
        }
        catch (Exception ex)
        {
            log.LogError("The analyze failed", ex);
            Console.WriteLine(ex.ToString());
        }
    }
}

function 正常运行,但有时会超时,如果 blob 包含大量数据,则会失败。 如何使用 Azure 函数避免超时并等待整个过程完成?

注意:我已阅读有关 Azure 持久函数的信息,但很难理解如何在我的代码中实现和使用它们。

如何使用 Azure 函数避免超时并等待整个过程完成?

正如您没有提到 Azure Function 应用程序使用哪个托管计划。 但是,如果请求处理需要很长时间并给出超时异常,则更改为 Azure Function App 的高级或专用托管计划

  • 实现块(文件分块),这意味着可以使用 Azure Function Blob 触发器和 Andrew Hoefling 在他的博客中给出的示例解决方法以块格式处理 blob 文件。

我已经阅读了有关 Azure 持久函数的信息,但很难理解如何在我的代码中实现它们并使用它们。

两个功能 - 一个用于 Durable Function 中的 Orchestrator,另一个用于 Blob 触发器,用于启动/触发运行持久协调器 function。

例如:

斑点触发器

[FunctionName("StartOrchestratorBlobTriggerFunction")]
public async Task StartOrchestratorBlobTriggerFunction(
[BlobTrigger("sample-workitems/{name}", Connection = "<Storage-Account-Name>")] Stream myBlob,
             string name,
             [OrchestrationClient] DurableOrchestrationClient durableOrchestrationClient,
             ILogger log)
    {
        // Obtain your blob content, deserialize it if necessary, and provide it to the orchestrator rather than the stream as seen below.
        await durableOrchestrationClient.StartNewAsync("YourNewDurableFunction", myBlob);   
    }

耐用 Function

[FunctionName("YourDurableFunction")]
 public async Task YourDurableFunction(
     [OrchestrationTrigger] DurableOrchestrationContextBase orchestrationContext,
     ILogger logger)
{
    // here Calling the activity functions
}

function 应尽快完成,您应该将长任务逻辑放入由队列消息触发的不同解决方案中,因此 Azure ZC1C425268E68385D1AB5074C17A94F14 立即将消息排入队列并完成。

我在这里有确切的用例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM