【问题标题】:Azure function does not start automatically cosmos trigger when set StartFromBeginning = true设置 StartFromBeginning = true 时 Azure 函数不会自动启动 cosmos 触发器
【发布时间】:2020-01-31 02:03:50
【问题描述】:

我正在尝试使用 Azure 函数 Cosmos 触发器将数据从一个集合迁移到另一个集合。我已设置 StartFromBeginning=True。我有多个要迁移的集合,因此我每个集合使用一个函数,因此迁移速度很快。

当我部署该功能时,它显示状态为正在运行,但实际上它不会启动传输,除非我停止并启动。或者,如果我转到监控部分并转到实时指标,那么它就会开始。有没有办法让它在部署后立即开始传输。我在搞砸设置吗?

例如,我昨天晚上和今天早上部署了一个函数,当我查看集合中的记录计数时,没有。当我转到 Azure 函数中的 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"

【问题讨论】:

    标签: azure azure-functions azure-cosmosdb


    【解决方案1】:

    您的租赁收藏中是否已经包含任何文件? StartFromBeginning 配置只会在租约集合为空时触发。

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

    Documentation on StartFromBeginning

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

    ** 我知道作为评论可能会更好,但不幸的是我没有足够的代表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-17
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      • 2023-01-31
      相关资源
      最近更新 更多