azure下载node.js超时

时间:2016-11-29 14:32:56

标签: node.js azure

我在Azure Functions中运行以下代码(代码来自Stack Overflow here),大部分时间都按照预期下载大文件。但是,有时它只是停止向文件添加数据,而不会再次启动。文件越大,发生的次数越多。我没有任何错误,没有。有没有什么方法可以在没有进展的10秒钟之后再次唤醒过程,或者以其他方式来关注这个过程?

var azure = require('azure-storage');
var fs = require('fs');

module.exports = function (context, input) {

context.done();

var accessKey = 'myaccesskey';
var storageAccount = 'mystorageaccount';
var containerName = 'mycontainer';

var blobService = azure.createBlobService(storageAccount, accessKey);

var recordName = "a_large_movie.mov";
var blobName = "standard/mov/" + recordName;

var blobSize;
var chunkSize = (1024 * 512) * 8; // I'm experimenting with this variable
var startPos = 0;
var fullPath = "D:/home/site/wwwroot/myAzureFunction/input/";
var blobProperties = blobService.getBlobProperties(containerName, blobName,   null, function (error, blob) {
    if (error) {
        throw error;
    }
    else    {
        blobSize = blob.contentLength;
        context.log('Registered length: ' + blobSize);
        fullPath = fullPath + recordName;
        console.log(fullPath);
        doDownload();
    }
}
);

function doDownload() {
var stream = fs.createWriteStream(fullPath, {flags: 'a'});
var endPos = startPos + chunkSize;
if (endPos > blobSize) {
    endPos = blobSize;
    context.log('Reached end of file endPos: ' + endPos);
}

context.log("Downloading " + (endPos - startPos) + " bytes starting from " + startPos + " marker.");

blobService.getBlobToStream(
    containerName, 
    blobName, 
    stream, 
    { 
        "rangeStart": startPos, 
        "rangeEnd": endPos-1 
    }, 
    function(error) {
        if (error) {
            throw error;
        }
        else if (!error) {
            startPos = endPos;
            if (startPos <= blobSize - 1) {
                doDownload();
            }
        }
    }
);
}

};

1 个答案:

答案 0 :(得分:0)

目前,功能应用程序存在短暂的空闲超时,因此如果他们在下一个请求中没有获得5分钟的请求,则将卸载服务器。

所以,你发生了这个问题:

  

有时它会停止向文件添加数据,而不会再次启动。文件越大,发生的次数越多。

您还可以在https://docs.microsoft.com/en-us/azure/azure-functions/functions-best-practices#avoid-large-long-running-functions找到有关Azure功能最佳做法的建议。

因此,您可以尝试使用WebJobs作为解决方法,并在Azure应用服务的应用设置中启用始终开启配置。

如有任何疑问,请随时告诉我。