Le architetture moderne su Azure sono spesso event-driven: i componenti reagiscono a ciò che accade invece di interrogarsi continuamente (polling). Prima di scegliere un servizio, però, l’esame AZ-204 pretende che tu distingua con precisione eventi e messaggi, perché guida tutte le decisioni successive.
Eventi vs messaggi
Un evento è una notifica leggera del fatto che “qualcosa è accaduto”: contiene metadati minimi (chi, cosa, quando, un riferimento alla risorsa) ma non il payload completo dei dati. Chi pubblica non sa né si aspetta come il consumatore reagirà, e spesso non gliene importa. Esempio tipico: un blob è stato creato in uno Azure Storage account.
Un messaggio invece trasporta dati grezzi che il producer si aspetta vengano elaborati da un consumatore, spesso con garanzie transazionali. Qui c’è un contratto: l’ordine va processato, il pagamento va registrato. Questo è il territorio di Azure Service Bus (code, topic/subscription, sessioni, transazioni, ordinamento FIFO).
Azure Event Grid
Event Grid è il servizio di routing pub/sub reattivo per eventi discreti. Modello mentale:
- I topic (system topic per le risorse Azure, custom/partner topic per le tue app) ricevono eventi.
- Le event subscription filtrano e instradano verso un event handler: Azure Functions, Logic Apps, Webhook, Service Bus, Event Hubs, Storage Queue.
- Lo schema nativo consigliato è CloudEvents 1.0 (standard CNCF), oltre allo schema Event Grid proprietario.
- Consegna push con retry e backoff automatici; gli eventi non consegnabili finiscono nella dead-letter su uno Storage account che configuri esplicitamente.
Event Grid brilla quando servono bassa latenza reattiva, fan-out verso molti handler e filtri per tipo o soggetto dell’evento. Non conserva uno storico consultabile: consegna e dimentica (entro il periodo di retry).
Azure Event Hubs
Event Hubs è una piattaforma di ingestion di stream ad altissimo throughput (telemetria, log, click-stream, IoT), capace di milioni di eventi al secondo. Concetti chiave:
- Partizioni: lo stream è diviso in log ordinati; la partition key determina la partizione, garantendo ordinamento per chiave.
- Consumer group: viste indipendenti dello stream, così più consumatori leggono in parallelo senza interferire.
- Checkpoint: il consumatore salva la propria posizione (offset) tipicamente in un blob, per riprendere dopo un riavvio senza rileggere tutto.
- Capture: archiviazione automatica dello stream in Azure Data Lake Storage / Blob in formato Avro, senza scrivere codice.
Event Hubs espone anche un endpoint Kafka-compatibile. È un event streaming engine (modello pull, retention temporale), non un router di singole notifiche.
Quando scegliere cosa
- Event Grid → reagire a eventi discreti e sporadici, integrazione serverless, fan-out, automazione (“quando un file arriva, elabora”).
- Event Hubs → flussi telemetrici massivi da analizzare o inoltrare a pipeline (Stream Analytics, Microsoft Fabric, Databricks).
- Service Bus → messaggi di business con ordinamento, transazioni, dead-letter nativo, dedup, sessioni.
Questi servizi si compongono: Event Hubs può notificare via Event Grid quando un nuovo blob di Capture è pronto, e una Function processa quel batch.
Trappole tipiche d’esame
- Scenario: dispositivi IoT inviano milioni di letture al secondo da analizzare in tempo reale → Event Hubs (streaming ad alto throughput, partizioni), NON Event Grid. Usare Event Grid per stream telemetrici massivi è l’errore classico.
- Scenario: alla creazione di un blob devi avviare una Function → Event Grid con system topic su Storage, NON Event Hubs. Un singolo evento di controllo non è uno stream.
- Scenario: serve garanzia FIFO, transazioni e dead-letter integrato per ordini → Service Bus, non Event Grid né Event Hubs.
- Scenario: devi consumare lo stesso stream con due elaborazioni indipendenti → crea due consumer group distinti in Event Hubs (non due subscription Event Grid).
- Scenario: gli eventi non consegnati vanno conservati → in Event Grid configura la dead-letter su uno Storage account (non è attiva di default); in Event Hubs usa Capture per persistere l’intero stream.