首页 > 解决方案 > Cosmos db 更改提要触发器在函数进入睡眠状态后未触发

问题描述

我有一个在本地运行良好但在 Azure 中不会触发的函数,除非该函数是“唤醒”的。该函数只是将项目从一个容器复制到另一个容器,并交换主键和 id 列(作为最终一致的二级索引)。这个应用中有两个功能,都是 Cosmos 触发器(不同的源容器和租约前缀);我所有的其他功能都在其他应用程序中。

该功能在 Linux 消费计划中,通过GitHub ActionAzure/functions-action@v1部署,它使用 zipdeploy,应该是同步触发器。没有其他函数在该容器上侦听(本地实例侦听模拟器),并且此函数无论如何都有唯一的租约前缀。

如果我在门户中查看函数应用程序(甚至只是概览页面),该函数会“唤醒”并处理所有 Cosmos DB 项目。如果我然后关闭概述页面,等待约 30 分钟,然后更改监视容器中的项目,则该功能不会触发。Azure Monitor 日志中没有任何内容,并且目标容器中的相应项目不会更改。我可以等待几 (10) 分钟并刷新,但日志或目标容器中仍然没有任何内容。然后当我重新打开概览页面时,该功能立即触发,并且目标容器中的项目几乎立即更新;Azure Monitor 日志会在 2-3 分钟后显示(正常的延迟量)。这种行为是 100% 可重复的。

我已经多次检查了所有故障排除建议,但没有发现任何有用的信息。

我如何在没有在门户中观察的情况下触发此功能?

标签: azureazure-functionsazure-cosmosdbazure-cosmosdb-changefeed

解决方案


原来我的连接字符串错误。当 CosmosDb 触发器连接字符串ConnectionStrings应该在AppSettings.

该函数实际上将在本地工作(如果它已经在云中运行),因为绑定在两个地方寻找:AppSettings它应该在哪里,然后回落到ConnectionStrings. 但是,当函数“休眠”时,Azure 规模控制器只是在看AppSettings,所以它永远不会醒来。


推荐阅读