当前位置: 首页 > 知识库问答 >
问题:

Azure 函数在设置 StartFrom 开始时不会自动启动 cosmos 触发器

秦承安
2023-03-14

我正在尝试使用azure函数Cosmos触发器将数据从一个集合迁移到另一个集合。我已将StartFromStart设置为True。我有多个集合要迁移,所以我对每个集合使用一个函数,所以传输速度很快。

当我部署函数时,它会显示状态为已运行,但它实际上不会启动传输,除非我选择停止并启动。或者,如果我转到“监控”部分,转到“实时度量”,然后它就开始了。是否有一种方法可以让它在部署后立即开始传输。我弄乱了环境吗?

例如,我昨天晚上部署了一个函数,今天早上当我查看集合中的记录计数时,没有记录。当我转到Azure functions中的Monitor部分,然后转到Live app metrics时,我只看到它正在初始化,然后开始执行。

宇宙触发器

    public async Task Run([CosmosDBTrigger(
        databaseName: "%SourceDatabaseName%", 
        collectionName: "%ContainerName%",
        ConnectionStringSetting = "connectionString",
        StartFromBeginning =true,
        LeaseCollectionName ="%ContainerLeaseName%",
        CreateLeaseCollectionIfNotExists = true)]IReadOnlyList<Document> source,
        [CosmosDB(databaseName:"%TargetDatabaseName%",
        collectionName:"%TargetContainerName%",
        ConnectionStringSetting = "connectionString")]IAsyncCollector<Document> destination,
        ILogger log)

部署脚本

    az functionapp create `
      -n $functionAppName `
      --storage-account $storageAccountName `
      --consumption-plan-location $location `
      --app-insights $appInsightsName `
      --runtime dotnet `
      -g $resourceGroup

    az functionapp deployment source config-zip `
      -g $resourceGroup -n $functionAppName --src $publishZip

    az functionapp config appsettings set -n $functionAppName -g $resourceGroup `
    --settings "connectionString=$cosmosConnectionString" "ContainerName=$cosmosContainer" "ContainerLeaseName=$($cosmosContainer)Lease" "SourceDatabaseName=$sourceCosmosDb" "TargetDatabaseName=$destCosmosDb" "TargetContainerName=$cosmosContainer" "JobType=$jobType"

共有1个答案

能向晨
2023-03-14

您的租约集合中是否已经包含任何文档?仅当租约集合为空时,才会触发 StartFromBeginning 配置。

另外,您提到您有多个集合要迁移,它们是否都使用相同的租约集合?如果是这样,最好给它们单独的租约集合来使用,否则其他触发器会看到租约集合中已经有信息,而不会触发StartFromStart。

关于StartFromStart的文档

设置后,它会告诉触发器从集合历史记录的开头开始读取更改,而不是从当前时间开始读取更改。这仅在触发器首次启动时才有效,因为在后续运行中,检查点已存储。当已创建租约时,将其设置为 true 不起作用。

**我知道这可能是一个更好的评论,但不幸的是,我没有足够的代表。

 类似资料:
  • 我正在编写一些代码,使用Cosmos作为我的存储来实现事件源。我的初始文档成功写入集合。然后,我设置了一个Azure函数,该函数在该集合的提要发生变化时触发,并将项目复制到另一个集合。 我的问题是,虽然如果我在本地调试函数应用程序,这一切都可以正常工作(更改通过并无问题地处理),但函数在作为函数应用程序发布后不会触发。该函数存在,但总执行计数始终为0。就像该函数没有在计时器上运行并检查提要。我的函

  • 我有Azure功能,并试图在本地启动,但启动后命令行显示和隐藏不到1秒。我试着在截图上抓住它: 看起来没有正确的启动参数。 my local.settings.json: 我的csproj文件是: 另外,我设置了“可执行文件”在调试属性窗口和完整路径上启动: 因为没有它,azure函数无法在本地启动,出现错误: 我能在哪里检查它?

  • 我正在使用CentOS 6.3 64位计算机。我在catalina.sh export catalina_opts=“-dcom.sun.management.jmxremote=true-dcom.sun.management.jmxremote.port=7010-dcom.sun.management.jmxremote.ssl=false-dcom.sun.management.jmxre

  • 带有Cosmos DB触发器的Azure函数(v1)如何从Cosmos DB中断中恢复?这应该自动发生还是需要重新启动功能应用程序? 在我们的场景中,Cosmos DB不可用,因为已达到订阅开销限制。取消开销限制后,Cosmos DB再次可用,通过输出绑定写入Cosmos DB的函数也成功了。 我想,当Cosmos DB因其他原因中断时,这种情况也可能发生。 为了使我们的系统对Cosmos DB的

  • 是否可以在azure管道中调用cosmos db触发器?管道只是将数据从azrue存储复制到cosmos db集合,需要调用预触发器。如何为复制活动指定触发器id?

  • 我用Inno Setup做了一个安装程序,在一些文件运行后我需要重启电脑,所以我用了这篇文章中的解决方案。 inno安装示例“CodePrepareToInstall”。iss运行良好,所以我使用了代码进行测试安装,但计算机重新启动后安装程序无法启动。 两个安装程序(inno demo和我的测试)都在“HKLM\Software\Microsoft\Windows\CurrentVersion\R