Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
SI APPLICA A: NoSQL
Questo articolo illustra i passaggi necessari per eseguire la migrazione del codice di un'applicazione esistente che usa la libreria del processore del feed di modifiche verso la funzionalità del feed di modifiche nella versione più recente di .NET SDK (denominata anche .NET V3 SDK).
Modifiche al codice necessarie
.NET V3 SDK presenta diverse modifiche di rilievo. Di seguito sono riportati i passaggi principali per eseguire la migrazione dell'applicazione:
- Convertire le istanze di
DocumentCollectionInfoin riferimentiContainerper i contenitori monitorati e lease. - Le personalizzazioni che usano
WithProcessorOptionsdevono essere aggiornate per l'usoWithLeaseConfigurationeWithPollIntervalper gli intervalli,WithStartTimeper l'ora di inizio eWithMaxItemsper definire il numero massimo di elementi. - Impostare
processorNamesuGetChangeFeedProcessorBuilderin modo che corrisponda al valore configurato inChangeFeedProcessorOptions.LeasePrefix, in alternativa usarestring.Empty. - Le modifiche non vengono più recapitate come
IReadOnlyList<Document>, ma come unaIReadOnlyCollection<T>in cuiTè un tipo che è necessario definire, non è più presente una classe di elementi di base. - Per gestire le modifiche, non è più necessaria un'implementazione di
IChangeFeedObserver, ma è necessario definire un delegato. Il delegato può essere una funzione statica o, se è necessario mantenere lo stato tra le esecuzioni, è possibile creare una classe personalizzata e passare un metodo di istanza come delegato.
Ad esempio, se il codice originale per compilare il processore del feed di modifiche è simile al seguente:
ChangeFeedProcessorLibrary.DocumentCollectionInfo monitoredCollectionInfo = new ChangeFeedProcessorLibrary.DocumentCollectionInfo()
{
DatabaseName = databaseId,
CollectionName = Program.monitoredContainer,
Uri = new Uri(configuration["EndPointUrl"]),
MasterKey = configuration["AuthorizationKey"]
};
ChangeFeedProcessorLibrary.DocumentCollectionInfo leaseCollectionInfo = new ChangeFeedProcessorLibrary.DocumentCollectionInfo()
{
DatabaseName = databaseId,
CollectionName = Program.leasesContainer,
Uri = new Uri(configuration["EndPointUrl"]),
MasterKey = configuration["AuthorizationKey"]
};
ChangeFeedProcessorLibrary.ChangeFeedProcessorBuilder builder = new ChangeFeedProcessorLibrary.ChangeFeedProcessorBuilder();
var oldChangeFeedProcessor = await builder
.WithHostName("consoleHost")
.WithProcessorOptions(new ChangeFeedProcessorLibrary.ChangeFeedProcessorOptions
{
StartFromBeginning = true,
LeasePrefix = "MyLeasePrefix",
MaxItemCount = 10,
FeedPollDelay = TimeSpan.FromSeconds(1)
})
.WithFeedCollection(monitoredCollectionInfo)
.WithLeaseCollection(leaseCollectionInfo)
.WithObserver<ChangeFeedObserver>()
.BuildAsync();
Il codice migrato verrà visualizzato come riportato di seguito:
Container leaseContainer = client.GetContainer(databaseId, Program.leasesContainer);
Container monitoredContainer = client.GetContainer(databaseId, Program.monitoredContainer);
ChangeFeedProcessor changeFeedProcessor = monitoredContainer
.GetChangeFeedProcessorBuilder<ToDoItem>("MyLeasePrefix", Program.HandleChangesAsync)
.WithInstanceName("consoleHost")
.WithLeaseContainer(leaseContainer)
.WithMaxItems(10)
.WithPollInterval(TimeSpan.FromSeconds(1))
.WithStartTime(DateTime.MinValue.ToUniversalTime())
.Build();
Per il delegato, è possibile avere un metodo statico per ricevere gli eventi. Se si utilizzano informazioni provenienti da IChangeFeedObserverContext è possibile eseguire la migrazione per utilizzare ChangeFeedProcessorContext:
ChangeFeedProcessorContext.LeaseTokenpuò essere usato in sostituzione diIChangeFeedObserverContext.PartitionKeyRangeIdChangeFeedProcessorContext.Headerspuò essere usato in sostituzione diIChangeFeedObserverContext.FeedResponseChangeFeedProcessorContext.Diagnosticscontiene informazioni dettagliate sulla latenza delle richieste per la risoluzione dei problemi
static async Task HandleChangesAsync(ChangeFeedProcessorContext context, IReadOnlyCollection<ToDoItem> changes, CancellationToken cancellationToken)
{
Console.WriteLine($"Started handling changes for lease {context.LeaseToken}...");
Console.WriteLine($"Change Feed request consumed {context.Headers.RequestCharge} RU.");
// SessionToken if needed to enforce Session consistency on another client instance
Console.WriteLine($"SessionToken ${context.Headers.Session}");
// We may want to track any operation's Diagnostics that took longer than some threshold
if (context.Diagnostics.GetClientElapsedTime() > TimeSpan.FromSeconds(1))
{
Console.WriteLine($"Change Feed request took longer than expected. Diagnostics:" + context.Diagnostics.ToString());
}
foreach (ToDoItem item in changes)
{
Console.WriteLine($"\tDetected operation for item with id {item.id}, created at {item.creationTime}.");
// Simulate work
await Task.Delay(1);
}
}
Eventi di integrità e osservabilità
Se in precedenza si utilizzava IHealthMonitor o si usavano IChangeFeedObserver.OpenAsync e IChangeFeedObserver.CloseAsync, usare l'API Notifiche.
IChangeFeedObserver.OpenAsyncpuò essere sostituito conWithLeaseAcquireNotification.IChangeFeedObserver.CloseAsyncpuò essere sostituito conWithLeaseReleaseNotification.IHealthMonitor.InspectAsyncpuò essere sostituito conWithErrorNotification.
Contenitore di stato e lease
Analogamente alla libreria del processore del feed di modifiche, la funzionalità del feed di modifiche in .NET V3 SDK usa un contenitore lease per memorizzare lo stato. Tuttavia, gli schemi sono diversi.
Il processore del feed di modifiche V3 dell'SDK rileverà qualsiasi stato della libreria precedente ed eseguirà automaticamente la migrazione verso il nuovo schema alla prima esecuzione del codice dell'applicazione migrata.
È possibile arrestare in modo sicuro l'applicazione usando il codice precedente, eseguire la migrazione del codice alla nuova versione, avviare l'applicazione migrata e tutte le modifiche apportate mentre l'applicazione è stata arrestata verranno prelevate ed elaborate dalla nuova versione.
Risorse aggiuntive
Passaggi successivi
È ora possibile procedere ad acquisire altre informazioni sul processore di feed di modifiche negli articoli seguenti:
- Panoramica del processore di feed di modifiche
- Uso dello strumento di stima di feed di modifiche
- Ora di avvio del processore di feed di modifiche
- Si sta tentando di pianificare la capacità per una migrazione ad Azure Cosmos DB?
- Se si conosce solo il numero di vcore e server nel cluster di database esistente, leggere le informazioni sulla stima delle unità richieste usando vCore o vCPU
- Se si conosce la frequenza delle richieste tipiche per il carico di lavoro corrente del database, leggere le informazioni sulla stima delle unità richieste con lo strumento di pianificazione della capacità di Azure Cosmos DB