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

Azure Function触发器启动时仅执行一次 不响应Cosmos DB插入事件

问题答复

这个现象不属于预期行为。正常本地调试场景下,只要Cosmos DB有新的插入操作、Timer触发器到达cron表达式配置的时间点,对应函数就应该重复触发执行,仅单次触发基本是配置或链路异常导致的,可按以下方向排查:

核心排查点

  • 检查自定义Handler的常驻状态
    自定义Handler要求你自行实现的服务进程必须在函数运行全周期保持存活,且持续监听配置的转发端口。如果你的服务在响应完第一次请求后就主动退出、或没有做持续的端口监听,Functions宿主后续无法将新的触发事件转发到你的服务,就会出现仅第一次触发执行的情况。你可以核对host.json中customHandler配置段,确认enableForwardingHttpRequest参数已开启,同时检查自定义服务的代码逻辑,不要在单次请求处理完成后终止进程。
  • 核对Cosmos DB触发器的监听配置
    Cosmos DB触发器依赖变更源(Change Feed)机制拉取增量数据,本地调试时如果local.settings.json中配置的Cosmos DB连接串权限不足、被监听集合/独立租约集合(Lease Collection)配置错误,后台的变更源拉取进程会在第一次拉取后静默退出,后续新插入的文档就无法触发函数。注意租约集合不能和业务集合共用,必须单独创建,且连接串对应的账号需要拥有对应集合的读写权限。
  • 排查宿主与Handler的连接状态
    如果Timer触发器也仅执行一次,基本可以判定是宿主和自定义Handler之间的连接断连、或Handler进程意外退出。你可以查看函数启动时的控制台日志,搜索是否存在worker process exited类的报错,这类报错直接指向自定义服务进程异常终止。
  • 校验触发器路由配置
    自定义Handler场景下,不需要为Cosmos触发器、Timer触发器手动配置独立路由,Functions宿主会自动按照固定规则转发所有触发事件到你的服务。如果你手动配置的路由和宿主默认转发规则不匹配,第一次触发后宿主可能因为路由匹配失败丢弃后续请求。默认规则下,所有非HTTP触发的事件都会被转发到自定义服务的根路径,请求头会附带触发类型、函数名标识,不要给非HTTP触发器设置特殊独立路由。

调试时可以把日志级别调整为Debug,观察触发事件到达时宿主是否输出请求转发日志,能快速定位问题是出在宿主侧没收到触发事件,还是事件转发到自定义服务的环节失败。

内容的提问来源于stack exchange,提问作者seasick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:33:35