DocumentDB如何改变支持恢复/继续?

时间:2016-12-20 15:18:15

标签: c# azure azure-cosmosdb

DocumentDB最近发布了更改Feed。 通过API,您可以请求更改集。

这里的参数是延续令牌&最大项目数。 如果我正确地得到了这个,你可以从continuation token = null开始。 您请求max x项目,如果有更多项目可用,则会在响应中附带延续令牌。这样,您就知道另一个变更集可用。

如果响应中的延续令牌为空,则会得到所有结果。

但是,下次您申请API时,您没有继续令牌可以继续... 这会导致整个数据库成为变更集吗?我怎么能阻止这个? 我是否需要使用最新的令牌来调用API?这会导致一些将在第二次处理的更改吗?

1 个答案:

答案 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;
}

请参阅https://github.com/Azure/azure-documentdb-dotnet/blob/master/samples/code-samples/ChangeFeed/Program.cs#L127以获取示例。