Azure 函数 - 防止多次调用

Posted

技术标签:

【中文标题】Azure 函数 - 防止多次调用【英文标题】:Azure Function - Guarding against Multiple invocation 【发布时间】:2019-07-13 06:54:03 【问题描述】:

我在计时器触发器上有一个 Azure 函数。我已经看到它的多个实例同时运行。有没有办法可以防止多次调用?即使我按下 Azure 门户上的播放按钮以获得功能,我也不希望它在上一次调用完成之前运行。例如,当我按下门户上的运行按钮时,下面似乎启动了两次,认为已经有一个实例正在运行。

2019-02-19T04:25:16  Welcome, you are now connected to log-streaming service.
2019-02-19T04:25:23.353 [Info] Function started (Id=aacaf548-79f1-49ec-8614-e638302b8368)
2019-02-19T04:25:26.639 [Info] Function started (Id=f4abe10c-f2bf-447b-bef7-efe3499420c6)

【问题讨论】:

【参考方案1】:

您可能能够实现此目的的一种方法是使您的代码同步(阻塞)功能并将规模限制为仅一个实例。这样,每次执行都将是一个阻塞调用。

为了限制规模,您可以修改应用设置WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT。

虽然 [Info] 日志中的请求 ID 不同,但这可能并不一定意味着请求转到了两个不同的实例。我相信,如果你的代码是异步的,同一个应用实例可以并行处理多个请求。

【讨论】:

如果我们必须使 Azure 函数同步并将缩放限制为 1,那么有些事情告诉我 Azure 函数不是适合这项工作的工具。 为什么不呢?如果 OP 不关心规模,但想使用 FaaS 编程模型 + 自动计时器触发器 + 低成本,那么限制规模很容易吗? @Shinju,为什么您一次只想调用一个函数?澄清一下,您设置的计时器触发器与您按下“运行”按钮无关(即,如果您在计时器触发器设置为触发时按下“运行”,则预计您的函数将被调用两次)。 “运行”按钮始终是一次性的。 @MarieHoeger 我有一个函数可以截断 SQL 表并从 API 调用加载数据。我有两个实例分别运行,有时会因重复或不完整的负载而损坏数据 @Ankit 我也不希望它在单个实例中同时运行。此外,我正在制定消费计划。 知道了。如果您使用的是 C#,则可以添加 [Singleton] 属性 (github.com/Azure/azure-functions-host/issues/912)。这将使它的功能不会在单个实例中同时运行。提供的 App Setting Ankit 会将您的功能限制为单个实例。

以上是关于Azure 函数 - 防止多次调用的主要内容,如果未能解决你的问题,请参考以下文章

如何防止多次播放动画 - Jquery

如何防止collectionView:didSelectItemAtIndexPath委托方法被调用多次

typescript 防止多次调用方法

防止多次 Ajax 更新

防止多次执行 JavaScript 函数

如何防止云调度器多次触发一个函数?