Durable Functions触发DrainMode后中断,如何保障运行函数执行完成?
解决Durable Functions DrainMode下运行中函数中断的配置方案
1. 调大函数应用的停止超时阈值
- 直接在函数应用的环境变量里设置两个参数:
FUNCTIONS_WORKER_PROCESS_IDLE_TIMEOUT:设成3600(单位秒,根据你函数的最长运行时间调整,确保够它跑完)WEBSITE_SHUTDOWN_TIMEOUT:同样设成3600,给实例关闭前留足收尾时间
2. 配置Durable Task的 drain 规则
- 编辑host.json文件,修改Durable扩展的配置,让drain行为只在实例关闭时触发,且留足超时时间:
{ "extensions": { "durableTask": { "extendedSessionsEnabled": true, "drainMode": "OnShutdown", "drainTimeout": "00:30:00" } } }extendedSessionsEnabled:开启后,实例缩容时不会直接终止,会先处理完当前任务drainMode设为OnShutdown:只有当实例要关闭的时候才触发drain,低负载时不会随便停实例drainTimeout:比如设30分钟,保证正在运行的函数有足够时间执行完
3. 防止实例被全停的额外设置
- 如果用的是Azure App Service的函数应用:
- 自动缩放规则里,最小实例数别设成0,至少留1个实例运行,避免全量缩容
- 调高缩放触发的CPU/内存阈值下限,减少不必要的缩容触发
- 另外,给orchestrator函数加个兜底设计:定期把状态 checkpoint 一下,就算真被中断了,也能从断点恢复(这是备用方案,优先靠前面的配置避免中断)
内容的提问来源于stack exchange,提问作者Rani Desai
相关产品推荐
相关产品推荐

