自重新启动后的上一个检查点以来,如何从Azure Cosmos DB中的变更Feed中读取文档?

时间:2018-10-27 22:27:55

标签: azure-cosmosdb

我正在使用Change Feed处理器库来读取分区集合上的Change Feed,下面是我如何配置它的代码。我可能会使用大多数默认选项。

ChangeFeedProcessorOptions feedProcessorOptions = new 
{          
   LeaseRenewInterval = TimeSpan.FromSeconds(15),
};

var docObserverFactory = DocumentFeedObserverFactory.Create(this.destinationCollectionInfo, this.dbRepository);
this.builder
    .WithHostName(hostName)
    .WithFeedCollection(this.monitoredCollectionInfo)
    .WithLeaseCollection(this.leaseCollectionInfo)
    .WithProcessorOptions(feedProcessorOptions)
    .WithObserverFactory(docObserverFactory);

只要Change Feed应用程序正在运行并且正在集合中插入/更新文档,并且Change Feed应用程序可以按预期拾取它们,此操作就可以正常运行。

当我停止Change Feed应用一段时间并在集合中插入/更新少量文档时,就会发生问题。然后,当我启动Change Feed应用程序时,它不会从上次离开的地方选择更改。停止更改Feed应用程序时插入的那些更改将丢失。但是,当我将标志StartFromBeginning设置为true时,它会从一开始就选择所有内容,包括在Change Feed应用停止一段时间后插入的更改。

我对从当前读取(从StartFromBeginning到false)的理解是,更改Feed自上次离开后便开始读取文档。但这似乎没有发生。请帮忙。

1 个答案:

答案 0 :(得分:0)

有两种方法可以从您刚离开的地方继续。

第一个,也是更准确的一个,是存储您最后阅读的Continuation令牌。这样,您可以在再次启动时指定它,它将胜过StartTimeStartFromBeginning标志。

第二个是提供StartTime属性,该属性将尝试自动查找给定时间的延续令牌。它的精度大约为5秒,因此有可能会丢失一些文档。