Uso del supporto del feed delle modifiche in Azure Cosmos DBWorking with the change feed support in Azure Cosmos DB

Azure Cosmos DB è un database con replica a livello globale rapido e flessibile, ideale per le applicazioni IoT, di videogiochi, del settore della vendita al dettaglio e di registrazioni di operazioni.Azure Cosmos DB is a fast and flexible globally replicated database, well-suited for IoT, gaming, retail, and operational logging applications. Uno schema progettuale comune in queste applicazioni prevede l'uso delle modifiche ai dati per avviare azioni aggiuntive.A common design pattern in these applications is to use changes to the data to kick off additional actions. Queste azioni aggiuntive possono essere una delle seguenti:These additional actions could be any of the following:

  • Attivazione di una notifica o di una chiamata a un'API quando un documento viene inserito o modificato.Triggering a notification or a call to an API when a document is inserted or modified.
  • Elaborazione di flussi per IoT o esecuzione di analisi.Stream processing for IoT or performing analytics.
  • Spostamento dei dati aggiuntivi tramite sincronizzazione con una cache, un motore di ricerca o un data warehouse oppure tramite archiviazione dei dati nella risorsa di archiviazione offline sicura.Additional data movement by synchronizing with a cache, search engine, or data warehouse, or archiving data to cold storage.

Il supporto del feed di modifiche in Azure Cosmos DB consente di creare soluzioni efficienti e scalabili per ognuno di questi modelli, come illustrato nell'immagine seguente:The change feed support in Azure Cosmos DB enables you to build efficient and scalable solutions for each of these patterns, as shown in the following image:

Uso del feed delle modifiche di Azure Cosmos DB per agevolare le analisi in tempo reale e gli scenari di calcolo guidati dagli eventi

Nota

Il supporto del feed di modifiche viene fornito per tutti i modelli di dati e contenitori in Azure Cosmos DB.Change feed support is provided for all data models and containers in Azure Cosmos DB. Il feed di modifiche tuttavia viene letto usando il client DocumentDB e serializza gli elementi in formato JSON.However, the change feed is read using the DocumentDB client and serializes items into JSON format. A causa della formattazione JSON, nei client MongoDB i documenti in formato JSON non corrisponderanno al feed di modifiche in formato JSON.Because of the JSON formatting, MongoDB clients will experience a mismatch between BSON formatted documents and the JSON formatted change feed.

Funzionamento del feed di modificheHow does change feed work?

Il supporto del feed di modifiche in Azure Cosmos DB è in ascolto di eventuali modifiche in una raccolta di Azure Cosmos DB.Change feed support in Azure Cosmos DB works by listening to an Azure Cosmos DB collection for any changes. Restituisce quindi l'elenco di documenti cambiati nell'ordine in cui sono stati modificati.It then outputs the sorted list of documents that were changed in the order in which they were modified. Le modifiche sono persistenti, possono essere elaborate in modo asincrono e incrementale e l'output può essere distribuito a uno o più consumer per l'elaborazione parallela.The changes are persisted, can be processed asynchronously and incrementally, and the output can be distributed across one or more consumers for parallel processing.

È possibile leggere il feed di modifiche in tre modi diversi, come verrà illustrato più avanti in questo articolo:You can read the change feed in three different ways, as discussed later in this article:

  1. Uso di Funzioni di AzureUsing Azure Functions
  2. Uso dell'SDK di Azure Cosmos DBUsing the Azure Cosmos DB SDK
  3. Uso della libreria del processore dei feed delle modifiche di Azure Cosmos DBUsing the Azure Cosmos DB Change Feed Processor library

Il feed di modifiche è disponibile per ogni intervallo di chiavi di partizioni nella raccolta dei documenti ed è quindi possibile distribuirlo a uno o più consumer per l'elaborazione parallela, come illustrato nell'immagine seguente.The change feed is available for each partition key range within the document collection, and thus can be distributed across one or more consumers for parallel processing as shown in the following image.

Elaborazione distribuita del feed delle modifiche di Azure Cosmos DB

Informazioni aggiuntive:Additional details:

  • Il feed di modifiche è abilitato per impostazione predefinita per tutti gli account.Change feed is enabled by default for all accounts.
  • È possibile usare la velocità effettiva con provisioning nell'area di scrittura o in qualsiasi area di lettura per leggere dal feed di modifiche, proprio come ogni altra operazione di Azure Cosmos DB.You can use your provisioned throughput in your write region or any read region to read from the change feed, just like any other Azure Cosmos DB operation.
  • Il feed delle modifiche include le operazioni di aggiunte e aggiornamenti eseguite sui documenti all'interno della raccolta.The change feed includes inserts and update operations made to documents within the collection. È possibile acquisire le eliminazioni impostando un flag "eliminazione temporanea" all'interno dei documenti al posto delle eliminazioni.You can capture deletes by setting a "soft-delete" flag within your documents in place of deletes. In alternativa, è possibile impostare un periodo di scadenza delimitato per i documenti tramite la funzionalità TTL, ad esempio 24 ore, e usare il valore di tale proprietà per acquisire le eliminazioni.Alternatively, you can set a finite expiration period for your documents via the TTL capability, for example, 24 hours and use the value of that property to capture deletes. Con questa soluzione è necessario elaborare le modifiche in un intervallo di tempo minore rispetto al periodo di scadenza TTL.With this solution, you have to process changes within a shorter time interval than the TTL expiration period.
  • Ogni modifica apportata a un documento viene visualizzata una sola volta nel feed delle modifiche e i client gestiscono la logica di checkpoint.Each change to a document appears exactly once in the change feed, and clients manage their checkpointing logic. La libreria del processore del feed delle modifiche fornisce funzionalità di checkpoint automatici e semantica di tipo "at least once".The change feed processor library provides automatic checkpointing and "at least once" semantics.
  • Solo la modifica più recente per un determinato documento viene inclusa nel registro modifiche.Only the most recent change for a given document is included in the change log. Le modifiche intermedie potrebbero non essere disponibili.Intermediate changes may not be available.
  • Il feed delle modifiche è ordinato in base all'ordine di modifica in ciascun valore di chiave della partizione.The change feed is sorted by order of modification within each partition key value. Non esiste alcun ordine garantito tra i valori partition-key.There is no guaranteed order across partition-key values.
  • Le modifiche possono essere sincronizzate da qualsiasi punto nel tempo, in altre parole non è previsto un periodo di conservazione fisso per cui sono disponibili le modifiche.Changes can be synchronized from any point-in-time, that is, there is no fixed data retention period for which changes are available.
  • Le modifiche sono disponibili in blocchi di intervalli di chiavi di partizione.Changes are available in chunks of partition key ranges. Questa funzionalità consente di apportare modifiche da raccolte di grandi dimensioni per poi elaborarle in parallelo da più consumer/server.This capability allows changes from large collections to be processed in parallel by multiple consumers/servers.
  • Le applicazioni possono richiedere più feed di modifiche alla volta nella stessa raccolta.Applications can request multiple change feeds simultaneously on the same collection.

Casi d'uso e scenariUse cases and scenarios

Il feed di modifiche consente di elaborare con efficienza set di dati di grandi dimensioni con volumi elevati di scritture e rappresenta un'alternativa alla query di un intero set di dati per identificare le modifiche.The change feed enables efficient processing of large datasets with a high volume of writes, and offers an alternative to querying an entire dataset to identify what has changed.

Ad esempio, con un feed di modifiche è possibile eseguire in modo efficiente le operazioni seguenti:For example, with a change feed, you can perform the following tasks efficiently:

  • Aggiornare una cache, un indice di ricerca o un data warehouse con i dati archiviati in Azure Cosmos DB.Update a cache, search index, or a data warehouse with data stored in Azure Cosmos DB.
  • Implementare la suddivisione in livelli e l'archiviazione a livello di applicazione, in altre parole archiviare i dati più usati ("hot data") in Azure Cosmos DB e trasferire quelli meno usati ("cold data") in Archivio BLOB di Azure o Azure Data Lake Store.Implement application-level data tiering and archival, that is, store "hot data" in Azure Cosmos DB, and age out "cold data" to Azure Blob Storage or Azure Data Lake Store.
  • Implementare analisi in batch sui dati usando Apache Hadoop.Implement batch analytics on data using Apache Hadoop.
  • Effettuare migrazioni senza alcun tempo di inattività a un altro account Azure Cosmos DB con uno schema di partizionamento differente.Perform zero down-time migrations to another Azure Cosmos DB account with a different partitioning scheme.
  • Implementare pipeline lambda in Azure con Azure Cosmos DB.Implement lambda pipelines on Azure with Azure Cosmos DB. Azure Cosmos DB offre una soluzione di database scalabile che può gestire sia l'inserimento che le query e implementare architetture lambda con costo totale di proprietà ridotto.Azure Cosmos DB provides a scalable database solution that can handle both ingestion and query, and implement lambda architectures with low TCO.
  • Ricevere e archiviare i dati di eventi da dispositivi, sensori, infrastrutture e applicazioni, per poi elaborarli in tempo reale con analisi di flusso di Azure, Apache Storm o Apache Spark.Receive and store event data from devices, sensors, infrastructure, and applications, and process these events in real time with Azure Stream Analytics, Apache Storm, or Apache Spark.

L'immagine seguente illustra come le pipeline lambda che eseguono sia inserimenti che query con Azure Cosmos DB possono usare il supporto del feed di modifiche:The following image shows how lambda pipelines that both ingest and query using Azure Cosmos DB can use change feed support:

Pipeline lambda basate su Azure Cosmos DB per l'inserimento e le query

Nelle app Web e per dispositivi mobili senza server è anche possibile tenere traccia di eventi come le modifiche al profilo, alle preferenze o alle località dei clienti per attivare determinate azioni come l'invio di notifiche push ai dispositivi tramite Funzioni di Azure.Also, within your serverless web and mobile apps, you can track events such as changes to your customer's profile, preferences, or location to trigger certain actions like sending push notifications to their devices using Azure Functions. Se si usa Azure Cosmos DB per creare un gioco, è ad esempio possibile usare il feed delle modifiche per implementare classifiche in tempo reale in base ai punteggi delle partite completate.If you're using Azure Cosmos DB to build a game, you can, for example, use change feed to implement real-time leaderboards based on scores from completed games.

Uso di Funzioni di AzureUsing Azure Functions

Se si usa Funzioni di Azure, il modo più semplice per connettersi a un feed di modifiche di Azure Cosmos DB consiste nell'aggiungere un trigger di Azure Cosmos DB all'app Funzioni di Azure.If you're using Azure Functions, the simplest way to connect to an Azure Cosmos DB change feed is to add an Azure Cosmos DB trigger to your Azure Functions app. Quando si crea un trigger di Azure Cosmos DB in un'app Funzioni di Azure, si seleziona la raccolta di Azure Cosmos DB a cui connettersi e la funzione viene attivata quando viene apportata una modifica alla raccolta.When you create an Azure Cosmos DB trigger in an Azure Functions app, you select the Azure Cosmos DB collection to connect to, and the function is triggered whenever a change to the collection is made.

I trigger possono essere creati nel portale di Funzioni di Azure, nel portale di Azure Cosmos DB o a livello di codice.Triggers can be created in the Azure Functions portal, in the Azure Cosmos DB portal, or programmatically. Per altre informazioni, vedere Azure Cosmos DB: elaborazione di database senza server con Funzioni di Azure.For more information, see Azure Cosmos DB: Serverless database computing using Azure Functions.

Uso dell'SDKUsing the SDK

SDK di DocumentDB per Azure Cosmos DB offre tutta la potenza necessaria per leggere e gestire un feed di modifiche,The DocumentDB SDK for Azure Cosmos DB gives you all the power to read and manage a change feed. con tutte le responsabilità che ne derivano.But with great power comes lots of responsibilities, too. Se è necessario gestire checkpoint e numeri di sequenza di documenti e avere un controllo granulare sulle chiavi di partizione, usare l'SDK può essere l'approccio ideale.If you want to manage checkpoints, deal with document sequence numbers, and have granular control over partition keys, then using the SDK may be the right approach.

Questa sezione illustra come usare l'SDK di DocumentDB per lavorare con un feed di modifiche.This section walks through how to use the DocumentDB SDK to work with a change feed.

  1. Iniziare leggendo le risorse seguenti da appconfig.Start by reading the following resources from appconfig. Le istruzioni per recuperare l'endpoint e la chiave di autorizzazione sono disponibili in Aggiornare la stringa di connessione.Instructions on retrieving the endpoint and authorization key are available in Update your connection string.

    DocumentClient client;
    string DatabaseName = ConfigurationManager.AppSettings["database"];
    string CollectionName = ConfigurationManager.AppSettings["collection"];
    string endpointUrl = ConfigurationManager.AppSettings["endpoint"];
    string authorizationKey = ConfigurationManager.AppSettings["authKey"];
    
  2. Creare il client come illustrato di seguito:Create the client as follows:

    using (client = new DocumentClient(new Uri(endpointUrl), authorizationKey,
    new ConnectionPolicy { ConnectionMode = ConnectionMode.Direct, ConnectionProtocol = Protocol.Tcp }))
    {
    }
    
  3. Ottenere gli intervalli di chiavi di partizione:Get the partition key ranges:

    FeedResponse pkRangesResponse = await client.ReadPartitionKeyRangeFeedAsync(
        collectionUri,
        new FeedOptions
            {RequestContinuation = pkRangesResponseContinuation });
    
    partitionKeyRanges.AddRange(pkRangesResponse);
    pkRangesResponseContinuation = pkRangesResponse.ResponseContinuation;
    
  4. Chiamare ExecuteNextAsync per ogni intervallo di chiavi di partizione:Call ExecuteNextAsync for every partition key range:

    foreach (PartitionKeyRange pkRange in partitionKeyRanges){
        string continuation = null;
        checkpoints.TryGetValue(pkRange.Id, out continuation);
        IDocumentQuery<Document> query = client.CreateDocumentChangeFeedQuery(
            collectionUri,
            new ChangeFeedOptions
            {
                PartitionKeyRangeId = pkRange.Id,
                StartFromBeginning = true,
                RequestContinuation = continuation,
                MaxItemCount = -1,
                // Set reading time: only show change feed results modified since StartTime
                StartTime = DateTime.Now - TimeSpan.FromSeconds(30)
            });
        while (query.HasMoreResults)
            {
                FeedResponse<dynamic> readChangesResponse = query.ExecuteNextAsync<dynamic>().Result;
    
                foreach (dynamic changedDocument in readChangesResponse)
                    {
                         Console.WriteLine("document: {0}", changedDocument);
                    }
                checkpoints[pkRange.Id] = readChangesResponse.ResponseContinuation;
            }
    }
    

Se si hanno più lettori, è possibile usare ChangeFeedOptions per distribuire il carico delle letture in thread diversi o in client diversi.If you have multiple readers, you can use ChangeFeedOptions to distribute read load to different threads or different clients.

Con queste poche righe di codice è possibile iniziare a leggere il feed di modifiche.And that's it, with these few lines of code you can start reading the change feed. È possibile ottenere il codice completo usato in questo articolo dal repository GitHub.You can get the complete code used in this article from the GitHub repo.

Nel codice del passaggio 4 ResponseContinuation nell'ultima riga ha l'ultimo numero di sequenza logico (LSN) del documento, che verrà usato la volta successiva in cui si leggeranno nuovi documenti dopo questo numero di sequenza.In the code in step 4 above, the ResponseContinuation in the last line has the last logical sequence number (LSN) of the document, which you will use the next time you read new documents after this sequence number. Usando il valore StartTime di ChangeFeedOption è possibile ampliare il campo di ricerca per ottenere i documenti.By using the StartTime of the ChangeFeedOption you can widen your net to get the documents. Se quindi ResponseContinuation è null, ma StartTime risale indietro nel tempo, si otterranno tutti i documenti modificati dopo StartTime.So, if your ResponseContinuation is null, but your StartTime goes back in time then you will get all the documents that changed since the StartTime. Se invece per ResponseContinuation viene specificato un valore, il sistema restituirà tutti i documenti dopo tale LSN.But, if your ResponseContinuation has a value then system will get you all the documents since that LSN.

La matrice di checkpoint quindi conserva solo l'ultimo numero di sequenza per ogni partizione,So, your checkpoint array is just keeping the LSN for each partition. ma se non si vogliono gestire le partizioni, i checkpoint, l'ultimo numero di sequenza, l'ora di inizio e così via, l'opzione più semplice consiste nell'usare la libreria del processore dei feed delle modifiche.But if you don’t want to deal with the partitions, checkpoints, LSN, start time, etc. the simpler option is to use the Change Feed Processor Library.

Uso della libreria del processore dei feed delle modificheUsing the Change Feed Processor library

La libreria del processore dei feed delle modifiche di Azure Cosmos DB consente di distribuire facilmente l'elaborazione degli eventi in più consumer.The Azure Cosmos DB Change Feed Processor library can help you easily distribute event processing across multiple consumers. Questa libreria semplifica la lettura delle modifiche nelle partizioni e in più thread che operano in parallelo.This library simplifies reading changes across partitions and multiple threads working in parallel.

Il vantaggio principale della libreria del processore dei feed delle modifiche è che non è necessario gestire ogni partizione e token di continuazione né eseguire il poll manuale di ogni raccolta.The main benefit of Change Feed Processor library is that you don’t have to manage each partition and continuation token and you don’t have to poll each collection manually.

La libreria del processore dei feed delle modifiche semplifica la lettura delle modifiche nelle partizioni e in più thread che operano in parallelo.The Change Feed Processor library simplifies reading changes across partitions and multiple threads working in parallel. Gestisce automaticamente la lettura delle modifiche nelle partizioni usando un meccanismo di lease.It automatically manages reading changes across partitions using a lease mechanism. Come si può osservare nell'immagine seguente, se si avviano due client che usano la libreria del processore dei feed delle modifiche, il lavoro viene diviso tra di essi.As you can see in the following image, if you start two clients that are using the Change Feed Processor library, they divide the work among themselves. Se si aumenta ancora il numero di client, il lavoro viene ulteriormente diviso tra di essi.As you continue to increase the clients, they keep dividing the work among themselves.

Elaborazione distribuita del feed delle modifiche di Azure Cosmos DB

Il client a sinistra è stato avviato per primo e ha iniziato a monitorare tutte le partizioni, quindi è stato avviato il secondo client e infine il primo ha assegnato alcuni lease al secondo client.The left client was started first and it started monitoring all the partitions, then the second client was started, and then the first let go of some of the leases to second client. Come si può notare, questo è il modo migliore per distribuire il lavoro tra computer e client diversi.As you can see this is the nice way to distribute the work between different machines and clients.

Si noti che, se si hanno due funzioni di Azure senza server che monitorano la stessa raccolta e usano lo stesso lease, le due funzioni possono ottenere documenti diversi a seconda di come la libreria del processore decide di elaborare le partizioni.Note that if you have two serverless Azure funtions monitoring the same collection and using the same lease then the two functions may get different documents depending upon how the processor library decides to processs the partitions.

Informazioni sulla libreria del processore dei feed delle modificheUnderstanding the Change Feed Processor library

L'implementazione del processore dei feed di modifiche prevede quattro componenti principali, ovvero la raccolta monitorata, la raccolta di lease, l'host del processore e i consumer.There are four main components of implementing the Change Feed Processor: the monitored collection, the lease collection, the processor host, and the consumers.

Avviso

La creazione di una raccolta ha implicazioni a livello di prezzi, poiché si sta riservando velocità effettiva per l'applicazione per comunicare con Azure Cosmos DB.Creating a collection has pricing implications, as you are reserving throughput for the application to communicate with Azure Cosmos DB. Per altre informazioni, visitare la pagina dei prezzi.For more details, please visit the pricing page

Raccolta monitorata: la raccolta monitorata include i dati da cui viene generato il feed di modifiche.Monitored Collection: The monitored collection is the data from which the change feed is generated. Eventuali inserimenti e modifiche alla raccolta monitorata vengono riflessi nel feed di modifiche della raccolta.Any inserts and changes to the monitored collection are reflected in the change feed of the collection.

Raccolta di lease: la raccolta di lease coordina l'elaborazione dei feed di modifiche in più processi di lavoro.Lease Collection: The lease collection coordinates processing the change feed across multiple workers. Una raccolta separata viene usata per archiviare i lease con un lease per partizione.A separate collection is used to store the leases with one lease per partition. È consigliabile archiviare questa raccolta di lease in un account diverso, con un'area di scrittura più vicina alla posizione in cui è in esecuzione il processore dei feed di modifiche.It is advantageous to store this lease collection on a different account with the write region closer to where the Change Feed Processor is running. Un oggetto lease contiene gli attributi seguenti:A lease object contains the following attributes:

  • Owner: specifica l'host proprietario del lease.Owner: Specifies the host that owns the lease
  • Continuation: specifica la posizione (token di continuazione) nel feed di modifiche per una partizione specifica.Continuation: Specifies the position (continuation token) in the change feed for a particular partition
  • Timestamp: data dell'ultimo aggiornamento del lease. Il timestamp può essere usato per verificare se il lease viene considerato scaduto.Timestamp: Last time lease was updated; the timestamp can be used to check whether the lease is considered expired

Host del processore: ogni host determina il numero di partizioni da elaborare in base al numero di istanze di host con lease attivi.Processor Host: Each host determines how many partitions to process based on how many other instances of hosts have active leases.

  1. Quando un host viene avviato, acquisisce lease per bilanciare il carico di lavoro in tutti gli host.When a host starts up, it acquires leases to balance the workload across all hosts. Un host rinnova periodicamente i lease, in modo che i lease rimangano attivi.A host periodically renews leases, so leases remain active.
  2. Un host imposta come checkpoint il token di continuazione più recente sul rispettivo lease per ogni lettura.A host checkpoints the last continuation token to its lease for each read. Per garantire la sicurezza della concorrenza, un host verifica il valore ETag per ogni aggiornamento di lease.To ensure concurrency safety, a host checks the ETag for each lease update. Sono supportate anche altre strategie per i checkpoint.Other checkpoint strategies are also supported.
  3. All'arresto, un host rilascia tutti i lease ma mantiene le informazioni sulla continuazione, in modo che sia possibile riprendere la lettura dal checkpoint archiviato in un secondo momento.Upon shutdown, a host releases all leases but keeps the continuation information, so it can resume reading from the stored checkpoint later.

Il numero di host non può attualmente essere superiore al numero di partizioni (lease).At this time the number of hosts cannot be greater than the number of partitions (leases).

Consumer: i consumer, o processi di lavoro, sono thread che eseguono l'elaborazione del feed di modifiche avviata da ogni host.Consumers: Consumers, or workers, are threads that perform the change feed processing initiated by each host. Ogni host di processori può includere più consumer.Each processor host can have multiple consumers. Ogni consumer legge il feed di modifiche dalla partizione a cui è assegnato e invia notifiche al rispettivo host in caso di modifiche e di lease scaduti.Each consumer reads the change feed from the partition it is assigned to and notifies its host of changes and expired leases.

Per una migliore comprensione dell'interazione tra i quattro elementi del processore dei feed di modifiche, è consigliabile esaminare un esempio nel diagramma seguente.To further understand how these four elements of Change Feed Processor work together, let's look at an example in the following diagram. La raccolta monitorata archivia i documenti e usa il valore "city" come chiave di partizione.The monitored collection stores documents and uses the "city" as the partition key. Come si può notare, la partizione blu contiene i documenti con il campo "city" compreso tra "A-E" e così via.We see that the blue partition contains documents with the "city" field from "A-E" and so on. Sono disponibili due host, ognuno con due consumer che leggono dalle quattro partizioni in parallelo.There are two hosts, each with two consumers reading from the four partitions in parallel. Le frecce mostrano i consumer che leggono da un punto specifico nel feed di modifiche.The arrows show the consumers reading from a specific spot in the change feed. Nella prima partizione il colore blu scuro rappresenta le modifiche non lette, mentre il colore blu chiaro rappresenta le modifiche già lette nel feed di modifiche.In the first partition, the darker blue represents unread changes while the light blue represents the already read changes on the change feed. Gli host usano la raccolta di lease per archiviare un valore di tipo "continuation" per tenere traccia della posizione di lettura corrente per ogni consumer.The hosts use the lease collection to store a "continuation" value to keep track of the current reading position for each consumer.

Uso dell'host del processore del feed delle modifiche di Azure Cosmos DB

Uso della libreria del processore dei feed delle modificheWorking with the Change Feed Processor library

Prima di installare il pacchetto NuGet del processore dei feed delle modifiche, è necessario installare quanto segue:Before installing Change Feed Processor NuGet package, first install:

  • Microsoft.Azure.DocumentDB, versione 1.13.1 o successivaMicrosoft.Azure.DocumentDB, version 1.13.1 or above
  • Newtonsoft.Json, versione 9.0.1 o successivaNewtonsoft.Json, version 9.0.1 or above

Installare quindi il pacchetto Nuget Microsoft.Azure.DocumentDB.ChangeFeedProcessor e includerlo come riferimento.Then install the Microsoft.Azure.DocumentDB.ChangeFeedProcessor Nuget package and include it as a reference.

Per implementare la libreria del processore dei feed delle modifiche, è necessario seguire questa procedura:To implement the Change Feed Processor library you have to do following:

  1. Implementare un oggetto DocumentFeedObserver, che implementa IChangeFeedObserver.Implement a DocumentFeedObserver object, which implements IChangeFeedObserver.

  2. Implementare un oggetto DocumentFeedObserverFactory, che implementa IChangeFeedObserverFactory.Implement a DocumentFeedObserverFactory, which implements a IChangeFeedObserverFactory.

  3. Nel metodo CreateObserver di DocumentFeedObserverFacory, creare un'istanza di ChangeFeedObserver creato nel passaggio 1 e restituirlo.In the CreateObserver method of DocumentFeedObserverFacory, instantiate the ChangeFeedObserver that you created in step 1 and return it.

    public IChangeFeedObserver CreateObserver()
    {
              DocumentFeedObserver newObserver = new DocumentFeedObserver(this.client, this.collectionInfo);
              return newObserver;
    }
    
  4. Creare un'istanza di DocumentObserverFactory.Instantiate DocumentObserverFactory.

  5. Creare un'istanza di ChangeFeedEventHost:Instantiate a ChangeFeedEventHost:

    ChangeFeedEventHost host = new ChangeFeedEventHost(
                     hostName,
                     documentCollectionLocation,
                     leaseCollectionLocation,
                     feedOptions,
                     feedHostOptions);
    
  6. Registrare DocumentFeedObserverFactory con l'host.Register the DocumentFeedObserverFactory with host.

Il codice per i passaggi da 4 a 6 è:The code for steps 4 through 6 is:

ChangeFeedOptions feedOptions = new ChangeFeedOptions();
feedOptions.StartFromBeginning = true;

ChangeFeedHostOptions feedHostOptions = new ChangeFeedHostOptions();

// Customizing lease renewal interval to 15 seconds.
// Can customize LeaseRenewInterval, LeaseAcquireInterval, LeaseExpirationInterval, FeedPollDelay
feedHostOptions.LeaseRenewInterval = TimeSpan.FromSeconds(15);

using (DocumentClient destClient = new DocumentClient(destCollInfo.Uri, destCollInfo.MasterKey))
{
        DocumentFeedObserverFactory docObserverFactory = new DocumentFeedObserverFactory(destClient, destCollInfo);
        ChangeFeedEventHost host = new ChangeFeedEventHost(hostName, documentCollectionLocation, leaseCollectionLocation, feedOptions, feedHostOptions);
        await host.RegisterObserverFactoryAsync(docObserverFactory);
        await host.UnregisterObserversAsync();
}

La procedura è terminata.That’s it. Dopo questi passaggi i documenti inizieranno a essere inclusi nel metodo DocumentFeedObserver ProcessChangesAsync.After these few steps documents will start coming into the DocumentFeedObserver ProcessChangesAsync method.

Passaggi successiviNext steps

Per altre informazioni sull'uso di Azure Cosmos DB con Funzioni di Azure, vedere Azure Cosmos DB: elaborazione di database senza server con Funzioni di Azure.For more information about using Azure Cosmos DB with Azure Functions see Azure Cosmos DB: Serverless database computing using Azure Functions.

Per altre informazioni sull'uso della libreria del processore dei feed delle modifiche, usare le risorse seguenti:For more information on using the Change Feed Processor library, use the following resources:

Per altre informazioni sull'uso del feed di modifiche tramite l'SDK, usare le risorse seguenti:For more information on using the change feed via the SDK, use the following resources: