Change Feed Processor - несколько потребителей приобретают аренду по всем partitonIds
У меня есть 2 экземпляра рабочей роли, которые слушают одну и ту же коллекцию в CosmosDb с помощью процессора лент изменений. Я получаю повторяющиеся данные, потому что оба потребителя приобрели аренду по всем разделам, и одни и те же данные передаются дважды.
Я использовал свойство LeasePrefix в ChangeFeedHostOptions и установил для него имя экземпляра (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)
};
Может кто-нибудь сказать мне, если я что-то упустил?
1 ответ
Причина, по которой вы получаете дубликаты, заключается в том, что вы используете LeasePrefix. LeasePrefix заявляет:
Это можно использовать для поддержки нескольких экземпляров ChangeFeedEventHost, указывающих на один и тот же канал, при использовании одной и той же вспомогательной коллекции.
Цель этого свойства состоит в том, чтобы на самом деле сделать это, разделить одну и ту же коллекцию аренды с несколькими независимыми хостами.
Чтобы решить вашу проблему, просто удалите назначение LeasePrefix или используйте один и тот же префикс для обоих.