【问题标题】:Azure Function not being immediately triggered as expectedAzure 函数未按预期立即触发
【发布时间】:2020-05-16 06:48:45
【问题描述】:

我们有一个 Azure 函数,它应该在文件插入到我们的 Azure 存储 blob 之一时立即运行。我们看到,在文件出现在存储 blob 中之后,它实际上需要 1-10 分钟才能运行。我们无法确定,但它似乎每 10 分钟轮询一次存储 blob 以查找更改,而不是在插入时立即运行。

这是触发器的代码; order-requests blob 是插入文件的位置:

using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using Microsoft.WindowsAzure.Storage.Blob;


namespace Integration
{
    public static class IntegrationFunction
    {
        [FunctionName("AbcIntegration")]
        public static async Task Run(
            [BlobTrigger("order-requests/{name}", Connection = "BlobStorageConString")] CloudBlockBlob blob, 
            [Blob("order-responses/{name}")] CloudBlockBlob outputBlob,
            ILogger log)
        {
            var result = await new IntegrationService().IntegrateTask(blob, outputBlob);



            log.LogInformation(result);
        }
    }
}

我们如何确保函数在文件遇到 blob 时立即运行?

【问题讨论】:

    标签: c# azure azure-functions azure-storage


    【解决方案1】:

    在做了一些研究之后,有两种选择可以解决这个问题:

    1. 使用事件网格触发而不是 Blob 触发:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-grid?tabs=csharp
    2. 确保函数应用在应用服务计划(而不是消耗计划)中,并确保应用设置为始终开启。

    实施 #2 对我们有用。我们正在制定一个消费计划,最多可能需要 10 分钟才能触发功能应用程序的触发器。我们将应用切换到应用服务计划,将其设置为 Always On,现在我们可以在文件遇到 blob 时立即执行。

    请务必注意,Always On App 服务计划涉及额外费用。消费计划背后的想法是仅在功能运行时付费。这需要自己付出代价,因为执行执行可能需要长达 10 分钟的冷启动时间。

    【讨论】:

    • 拥有应用服务计划是有成本的,不是吗?根据使用情况,这可能不是最具成本效益的方法。我不确定哪些类型的成本与事件网格触发相关。
    • @billoverton 你是对的。永远在线的应用服务计划比消耗计划的成本更高。我会将其添加到我的答案中。
    • 嗨@Stpete111。很高兴您找到了问题的答案。所以,不要犹豫accept as an answer,这样有同样问题的其他人可以轻松找到并使用此解决方案
    • @JustShadow 我肯定会,但它说我必须等到明天才能这样做。
    猜你喜欢
    • 2017-05-29
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多