簡體   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