DocumentDB最近发布了更改Feed。 通过API,您可以请求更改集。
这里的参数是延续令牌&最大项目数。 如果我正确地得到了这个,你可以从continuation token = null开始。 您请求max x项目,如果有更多项目可用,则会在响应中附带延续令牌。这样,您就知道另一个变更集可用。
如果响应中的延续令牌为空,则会得到所有结果。
但是,下次您申请API时,您没有继续令牌可以继续... 这会导致整个数据库成为变更集吗?我怎么能阻止这个? 我是否需要使用最新的令牌来调用API?这会导致一些将在第二次处理的更改吗?
答案 0 :(得分:4)
使用Change Feed,您总是会得到一个延续令牌(与查询和读取源不同,当没有更多结果时,它不会返回延续令牌)。
IDocumentQuery<Document> query = client.CreateDocumentChangeFeedQuery(
collectionUri,
new ChangeFeedOptions
{
PartitionKeyRangeId = pkRange.Id,
StartFromBeginning = true,
RequestContinuation = continuation, // From last call to change feed
MaxItemCount = -1
});
// Paginate through all results currently available
while (query.HasMoreResults)
{
FeedResponse<DeviceReading> readChangesResponse = query.ExecuteNextAsync<DeviceReading>().Result;
foreach (DeviceReading changedDocument in readChangesResponse)
{
Console.WriteLine("\tRead document {0} from the change feed.", changedDocument.Id);
numChangesRead++;
}
// Save token for resuming after some time
checkpoints[pkRange.Id] = readChangesResponse.ResponseContinuation;
}