Azure Cosmos DB è il database multifunzionale di punta offerto dalla piattaforma Microsoft Azure. E' altamente scalabile, affidabile e performante e tra le sue ricche funzionalità dispone anche di un change feed dal quale è possibile leggere tutte le modifiche effettuati ai documenti, nel caso di container SQL, ma sono supportati anche altre tipologie di container.
Per leggere questo feed possiamo sfruttare l'SDK per i rispettivi linguaggi, oppure, data la natura del feed e delle potenziali attività da fare, sfruttare le Azure Function. Gli scenari di utilizzo possono essere molteplici: materializzare delle tabelle sulla base dei documenti modificati, avere uno storico delle modifiche fatte ai documenti, alimentare tabelle a scopi di reportistica, oppure distribuire i cambiamenti su più micro servizi.
Sfruttare il feed con le Azure Function è molto semplice. Basta, se usiamo il wizard online, utilizzare il trigger relativo.
Successivamente dobbiamo indicare le coordinate del Cosmos DB e della collezione da monitorare.
Nella figura possiamo vedere che ci viene chiesto anche il nome della collezione di lease, un container speciale usato per tenere traccia sullo stato del feed e per coordinare il lavoro delle function. Possiamo infatti scalare e consumare il feed contemporaneamente accingendo da più partizioni.
Possiamo a questo punto procedere al codice, il quale riceve come parametro uno o più documenti che sono stati modificati.
#r "Microsoft.Azure.Documents.Client" using System; using System.Collections.Generic; using Microsoft.Azure.Documents; public static void Run(IReadOnlyList<Document> documents, TraceWriter log) { if (documents != null && documents.Count > 0) { log.Verbose("Documents modified " + documents.Count); foreach (var d in documents) { log.Verbose("Id " + d.Id); } } }
Se proviamo ora a modificare uno o più documenti, possiamo vedere nel log la lista degli id cambiati.
Il motore riceve in batch i cambiamenti e riparte sempre dal punto in cui è rimasto, perciò anche in caso di interruzioni della function, non perdiamo i cambiamenti che si sono verificati.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
Utilizzare politiche di resiliency con Azure Container App
Sfruttare i KeyedService in un'applicazione Blazor in .NET 8
Eseguire operazioni con timeout in React
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
Utilizzare database e servizi con gli add-on di Container App
Accesso sicuro ai secrets attraverso i file in Azure Container Apps
Eseguire una GroupBy per entity in Entity Framework
Eseguire attività pianificate con Azure Container Jobs
Sfruttare al massimo i topic space di Event Grid MQTT
Migrate and Modernize your .NET Applications on Azure
Utilizzare gli snapshot con Azure File shares