一个Cosmos DB分区中的更改将转到多个Azure函数实例

时间:2019-05-06 13:56:26

标签: azure-functions azure-cosmosdb

我们有一个带有Cosmos DB触发器的Azure功能,该触发器需要按顺序而不是按任何特定顺序处理分区中的项目。我的理解是,触发器将始终一次将一个分区的所有更改发送到一个函数实例。但是,我看到在几秒钟内多个功能实例正在处理一个分区的更改。因此,更改馈送给函数实例的分配无法正常工作。

此功能应用程序在最新的V2功能主机上运行。该功能是持久功能。我们使用带有特定前缀的“租赁”集合来管理此变更供稿的租赁。

[FunctionName("ProcessChanges")]
public static async Task RunAsync([CosmosDBTrigger(
    databaseName: "MyDatabase",
    collectionName: "MyCollection",
    ConnectionStringSetting = "AzureWebJobsCosmosDBConnectionString",
    LeaseCollectionName = "leases",
    LeaseCollectionPrefix = "chgproc",
    CreateLeaseCollectionIfNotExists = true)]IReadOnlyList<Document> documents,
    [OrchestrationClient]DurableOrchestrationClient starter,
    ILogger log)
{
    // Processing code that calls the orchestrator function
}

我希望给定时间对给定分区的所有更改都将转到一个函数实例,但有时它们会转到多个功能实例。

1 个答案:

答案 0 :(得分:0)

我找不到任何有关该发行版实际工作方式的文档,您有资料来源吗?

您的租赁物集合是否有docs中提到的/id分区?

  

租用容器:租用容器在多个和动态的无服务器Azure函数实例之间维护状态并启用动态缩放。该租用容器可以由Azure Cosmos DB触发器手动或自动创建。要自动创建租用容器,请在配置中设置CreateLeaseCollectionIfNotExists标志。 已分区的租用容器必须具有/ id分区键定义。