更改源处理器 - 多个使用者获取所有 partitonId 的租约



我有 2 个辅助角色实例,使用更改源处理器侦听 CosmosDb 中的同一集合。我收到重复的数据,因为两个使用者都获得了所有分区的租约,并且相同的数据正在流式传输两次。

我使用了 ChangeFeedHostOptions 的 LeasePrefix 属性,并将其设置为实例名称 ( RoleEnvironment.CurrentRoleInstance.Id (

下面是租约收集中的示例:

Consumer1
{
    "id": "WorkerRole1_IN_1xyz.documents.azure.com_v0QfAA==_v0QfAKJwMgA=..0",
    "_etag": ""0000c601-0000-0000-0000-5acf0fca0000"",
    "state": 2,
    "PartitionId": "0",
    "Owner": "WorkerRole1_IN_1",
    "ContinuationToken": ""115725"",
    "SequenceNumber": 1,
    "_rid": "DiADAKjOkAMDAAAAAAAAAA==",
    "_self": "dbs/DiADAA==/colls/DiADAKjOkAM=/docs/DiADAKjOkAMDAAAAAAAAAA==/",
    "_attachments": "attachments/",
    "_ts": 1523519434
}
Consumer2:
{
    "id": "WorkerRole1_IN_0xyz.documents.azure.com_v0QfAA==_v0QfAKJwMgA=..4",
    "_etag": ""00007e01-0000-0000-0000-5acf0fcc0000"",
    "state": 2,
    "PartitionId": "0",
    "Owner": "WorkerRole1_IN_0",
    "ContinuationToken": ""115725"",
    "SequenceNumber": 1,
    "_rid": "DiADAPNPPAMDAAAAAAAAAA==",
    "_self": "dbs/DiADAA==/colls/DiADAPNPPAM=/docs/DiADAPNPPAMDAAAAAAAAAA==/",
    "_attachments": "attachments/",
    "_ts": 1523519436
}

以下是我使用的提要选项:

ChangeFeedOptions feedOptions = new ChangeFeedOptions
{
    StartFromBeginning = true,
    MaxItemCount = 10000,
    StartTime = DateTime.Today.AddDays(-7)
};
ChangeFeedHostOptions feedHostOptions = new ChangeFeedHostOptions
{
    LeasePrefix = Configs.hostName,
    FeedPollDelay = TimeSpan.FromSeconds(30)
};

有人可以告诉我我是否遗漏了什么吗?

您收到重复项的原因是您使用的是 LeasePrefix。租赁前缀声明:

这可用于支持多个 ChangeFeedEventHost 实例,同时使用相同的辅助集合,同时指向同一源。

该属性的目标是实际执行此操作,与多个独立主机共享相同的租约集合。

要解决您的问题,只需删除 LeasePrefix 分配或对两者使用相同的前缀。

最新更新