我有2个worker角色实例使用Change Feed Processor在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
}
以下是我使用的Feed选项:
ChangeFeedOptions feedOptions = new ChangeFeedOptions
{
StartFromBeginning = true,
MaxItemCount = 10000,
StartTime = DateTime.Today.AddDays(-7)
};
ChangeFeedHostOptions feedHostOptions = new ChangeFeedHostOptions
{
LeasePrefix = Configs.hostName,
FeedPollDelay = TimeSpan.FromSeconds(30)
};
有人可以告诉我,如果我遗失了什么吗?
答案 0 :(得分:1)
您收到重复的原因是因为您使用的是LeasePrefix。 LeasePrefix声明:
这可用于支持在使用相同辅助集合时指向同一个Feed的多个ChangeFeedEventHost实例。
该属性的目标是实际执行此操作,与多个独立主机共享相同的租约集合。
要解决您的问题,只需删除LeasePrefix分配或为两者使用相同的前缀。