我有 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 分配或对两者使用相同的前缀。