更改Feed处理器库不支持ChangeFeedProcessorOptions FeedPollDelay / CheckPointFrequency

时间:2019-05-02 16:45:48

标签: azure azure-cosmosdb

我正在遵循此示例代码(https://github.com/Azure/azure-documentdb-changefeedprocessor-dotnet#example),以注册观察者以处理cosmos db集合中的更改供稿。 我正在使用实用程序在cosmos db集合中创建新文档(例如,在for循环中创建400个文档)。 我正在使用30秒的FeedPollDelay。但是CFP lib似乎并没有兑现它。即使Feed轮询延迟间隔到期,也会反复调用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个文档就可以了。但是我希望在Feed轮询延迟(30秒)时间间隔到期后,第二批将与其余340个文档一起调用。

但是ProcessChangesAsync方法经常被触发,并且这个选项没有被兑现。

1 个答案:

答案 0 :(得分:1)

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. 等等...