You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Azure Function v4设置为单实例 禁止特定函数随应用扩缩容

Azure Function v4 .NET 6 Isolated 模式下指定Timer Trigger函数单例运行方案

首先明确:你不需要将整个函数应用设为单例,Timer Trigger原生就支持跨实例单例执行的能力,完全匹配你的需求:即使整个函数应用横向扩容到多个实例,指定的Timer Trigger同一时间只会有一个实例运行,不会出现多实例同时执行的情况。

具体实现步骤

  • 首先确认Timer Trigger的UseMonitor属性为开启状态(该配置默认值为true,显式配置更稳妥),该配置会依赖AzureWebJobsStorage存储账户的Blob租约实现分布式锁,保证同一时间只有一个实例执行定时任务。
    示例代码:
public class MySingletonTimerFunction
{
    [Function("SingletonTimerJob")]
    public void Run([TimerTrigger("0 0 */1 * * *", UseMonitor = true)] TimerInfo timerInfo)
    {
        // 业务逻辑实现
    }
}
  • 如果需要额外保证任务不会重入(即上一次执行未结束时,到了下一次触发时间直接跳过),可以在host.json中添加Timer扩展的并发限制配置:
{
  "version": "2.0",
  "extensions": {
    "timers": {
      "maxDegreeOfParallelism": 1,
      "runOnStartup": false
    }
  }
}
  • 如果你需要的是整个函数应用所有函数都不允许扩缩容(该配置会影响应用内的其他函数,仅在你确认所有函数都不需要扩容时使用),可以在函数应用的环境变量/应用配置中添加键WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT,值设为1,即可强制整个应用最多只能有1个运行实例。

注意事项

  • 确保你的函数应用配置的AzureWebJobsStorage连接字符串有效,Timer Trigger的分布式锁依赖该存储账户实现,存储不可用会导致锁机制失效。
  • 若你的Timer Trigger的CRON表达式间隔小于任务的平均执行时长,建议开启TimerInfo.IsPastDue判断,跳过过期的触发任务,避免业务异常。

内容的提问来源于stack exchange,提问作者Pure.Krome

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:15:04