Процессор ленты изменений Lib не учитывает ChangeFeedProcessorOptions FeedPollDelay / CheckPointFrequency - PullRequest
0 голосов
/ 02 мая 2019

Я следую этому примеру кода (https://github.com/Azure/azure-documentdb-changefeedprocessor-dotnet#example)), чтобы зарегистрировать наблюдателя для обработки изменений в коллекции БД космос. Я создаю новые документы в коллекции cosmos db с помощью утилиты (скажем, создаю 400 документов в цикле for). Я использую с помощью FeedPollDelay 30 секунд. Но это, кажется, не соблюдается библиотекой CFP. Метод ProcessChangesAsync вызывается повторно даже до истечения интервала задержки опроса канала. В первом пакете извлекается около 60 документов, а во втором - около 20 документов, в третьем - около 100 документов.

        DocumentCollectionInfo feedCollectionInfo = new DocumentCollectionInfo()
        {
            DatabaseName = databaseName,
            CollectionName = monitoredCollectionName,
            Uri = new Uri(uri),
            MasterKey = masterKey
        };

        DocumentCollectionInfo leaseCollectionInfo = new DocumentCollectionInfo()
        {
            DatabaseName = databaseName,
            CollectionName = leaseCollectionName,
            Uri = new Uri(uri),
            MasterKey = masterKey
        };

        ChangeFeedProcessorOptions feedProcessorOptions = new ChangeFeedProcessorOptions()
        {
            FeedPollDelay = TimeSpan.FromSeconds(30)
            //LeasePrefix = Guid.NewGuid().ToString(),
            //MaxItemCount = 100
        };
        ChangeFeedProcessorBuilder builder = new ChangeFeedProcessorBuilder();
        processor = await builder
            .WithHostName(hostName)
            .WithFeedCollection(feedCollectionInfo)
            .WithLeaseCollection(leaseCollectionInfo)
            .WithProcessorOptions(feedProcessorOptions)
            .WithObserver<LiveWorkItemChangeFeedObserver>()
            .BuildAsync();

        await processor.StartAsync();

Хорошо получить 60 документов в первой партии. Но я ожидаю, что вторая партия будет вызываться с оставшимися 340 документами в одной партии после истечения интервала задержки опроса подачи (30 секунд).

Но метод ProcessChangesAsync часто запускается, и этот параметр не учитывается.

1 Ответ

1 голос
/ 03 мая 2019

FeedPollDelay используется, когда процессор подачи изменений считывает ленту изменений и не находит новых изменений, а не между каждой партией.

Пример потока:

  1. CFP опрашивает изменения, находит X.
  2. ProcessChangesAsync вызывается с X
  3. После завершения ProcessChangesAsync CFP немедленно запрашивает изменения и находит Y.
  4. ProcessChangesAsync вызывается с Y.
  5. После завершения ProcessChangesAsync CFP немедленно опрашивает изменения, ничего не находит, ожидает FeedPollDelay.
  6. CFP опрашивает изменения, находит Z.
  7. ProcessChangesAsync вызывается с Z
  8. После завершения ProcessChangesAsync CFP немедленно опрашивает изменения, ничего не находит, ожидает FeedPollDelay.
  9. Etc ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...