【问题标题】:Azure Functions Core Tools - hidden triggers or caching?Azure Functions 核心工具 - 隐藏触发器或缓存?
【发布时间】:2020-03-05 21:42:43
【问题描述】:

我正在使用 Visual Studio 2019 开发简单的 azure 函数。我正在使用 Azure Functions Core Tools,因为它们在我每次启动项目时都会启动。

功能是时间触发和活动触发的。每次我再次启动我的项目时,Azure Functions Core Tools 也会启动 - 现在正在发生连线:

看起来这些函数不仅按预期从当前运行时调用一次 - 而且还从旧触发器调用,仍在后台运行。如果停止其中一个功能,它有时会从我之前的项目运行中获取“旧”数据。我还收到有关未知功能的警告,我之前在我的项目中重命名了十几次。

我清除了项目的 /bin/ 路径 - 但旧函数似乎在 Azure Functions Core Tools 的隐藏缓存或隐藏运行时中仍然存在。

我可以在 Azure Functions Core Tools 中每次新启动项目之前运行主停止或主清理吗?

这种行为是否也发生在真实的 Azure 环境中 - 因为我看到时间触发的函数在那里以更快的周期运行,因为它们应该运行 - 可能是由之前发布的实例中仍在运行的计时器触发的?

【问题讨论】:

    标签: azure azure-functions azure-functions-core-tools


    【解决方案1】:

    如果您使用的是 Durable Framework(基于您之前的问题),则需要删除存储工件,否则它将执行之前未完成的执行。

    有几种方法可以做到这一点:

    [FunctionName("PurgeInstanceHistory")]
    public static Task Run(
        [DurableClient] IDurableOrchestrationClient client,
        [TimerTrigger("0 0 12 * * *")]TimerInfo myTimer)
    {
        return client.PurgeInstanceHistoryAsync(
            DateTime.MinValue,
            DateTime.UtcNow.AddDays(-30),  
            new List<OrchestrationStatus>
            {
                OrchestrationStatus.Completed
            });
    }
    

    您也可以使用 CLI:

    func durable delete-task-hub --task-hub-name UserTest
    

    作为另一种选择,您可以使用 Microsoft Azure 存储资源管理器手动删除工件并将其连接到本地存储模拟器:

    【讨论】:

    • 完美。通过定时功能,我可以定期在 azure 上执行此操作吗?或者,如果我只有一个编排函数,我可以在每次运行此函数之前执行此操作?
    • 您可以随时清理。如果没有表,它将为您创建一个新表。关于时间触发,我不确定……需要研究一下
    猜你喜欢
    • 2020-02-11
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 2022-01-19
    • 2018-10-26
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多