Panoramica delle sottoscrizioni condivise in Griglia di eventi di Azure Broker MQTT

Scrizioni condivise in Griglia di eventi di Azure Broker MQTT sono un modello di messaggistica che consente a più client di utilizzare messaggi da una sottoscrizione a un singolo argomento come gruppo, consentendo al broker di distribuire i messaggi tra i client in modo con carico bilanciato. Invece di ogni sottoscrittore che riceve ogni messaggio, un solo client all'interno del gruppo condiviso riceve ogni messaggio, migliorando la scalabilità e la velocità effettiva per i sistemi di elaborazione back-end.

Funzionamento delle sottoscrizioni condivise

In una sottoscrizione MQTT standard ogni client sottoscritto riceve una copia di ogni messaggio. Con le sottoscrizioni condivise, il broker considera un gruppo di client come un singolo sottoscrittore logico e distribuisce i messaggi tra di essi.

  • Ogni messaggio dell'applicazione corrispondente al filtro condiviso viene recapitato a una sola sessione attiva all'interno del gruppo
  • La distribuzione del carico è tipicamente bilanciata in modo casuale all'interno del gruppo.
  • Una sessione client può contenere contemporaneamente sottoscrizioni condivise e non condivise
  • Più gruppi possono sottoscrivere lo stesso argomento in modo indipendente

Formato dell'argomento della sottoscrizione condivisa

Le sottoscrizioni condivise usano il formato seguente:

$share/{group-name}/{topic-filter}

Componenti:

  • $share → Identifica una sottoscrizione condivisa
  • {group-name} → gruppo logico di consumatori
  • {topic-filter} → Argomento o sottoscrizione con caratteri jolly

Esempio:

$share/order-processors/retail/orders/#

Caratteristiche chiave

  • Consumo con carico bilanciato: i messaggi vengono distribuiti tra client nello stesso gruppo per garantire un'elaborazione efficiente.
  • Scalabilità orizzontale: i consumer possono aumentare in modo indipendente senza impatto sugli editori.
  • Gruppi di consumer indipendenti: più gruppi condivisi ricevono gli stessi messaggi in modo indipendente durante il bilanciamento interno.
  • Supporto per le sottoscrizioni miste: un client può gestire sottoscrizioni condivise e non condivise nella stessa sessione.

Scenario di esempio: Elaborazione degli ordini al dettaglio

Considerate uno scenario di elaborazione degli ordini al dettaglio usando Event Grid MQTT Broker.

  • Argomento: retail/orders
  • Gruppo condiviso: order-workers
  • Clienti: Worker1, Worker2, Worker3

Flusso:

  1. Gli ordini vengono pubblicati in retail/orders
  2. Tutti i lavoratori sottoscrivono: $share/order-workers/retail/orders
  3. Gestore MQTT di Griglia di eventi distribuisce:
    • Ordine 1 → Lavoratore1
    • Ordine 2 → Lavoratore2
    • Ordine 3 → Lavoratore3

Ogni ordine viene elaborato una sola volta, mentre il sistema viene ridimensionato orizzontalmente.

Diagramma del broker MQTT di Griglia di eventi che distribuisce tre ordini di vendita dettaglio a tre ruoli di lavoro usando il gruppo di sottoscrizioni condivise ordine-ruoli di lavoro.

Comportamento e vincoli del protocollo

Supporto della versione MQTT

  • Funzionalità disponibile solo in MQTT 5
  • I client MQTT 3.1.1 che tentano $share/... verranno disconnessi

Semantica per il recapito dei messaggi

  • Ogni messaggio viene recapitato a un client per gruppo
  • Il recapito segue la semantica almeno una volta (QoS 1)

Ordinamento dei messaggi

  • Nessuna garanzia di ordinamento rigoroso tra i membri del gruppo

Comportamento della sessione

  • La scadenza della sessione influisce sul recapito dei messaggi:
    • Se un client si disconnette e la sessione scade, i messaggi potrebbero essere riassegnati
    • Le sessioni persistenti migliorano l'affidabilità

Casi d'uso nel broker MQTT di Event Grid

Le sottoscrizioni condivise sono ideali per:

  • Elaborazione dei dati di telemetria IoT ad alta velocità effettiva: distribuire dati di telemetria o eventi tra più servizi di elaborazione.
  • Pool di ruoli di lavoro back-end/microservizi: consentire ai servizi senza stato di elaborare gli eventi senza duplicazione.
  • Consumatori di Unified Namespace (UNS): consumano efficientemente flussi di dati industriali ad alta capacità.

Quando usare le sottoscrizioni condivise

Usare sottoscrizioni condivise quando:

  • È necessaria l'elaborazione parallela dei messaggi.
  • Un singolo consumer non può gestire il carico.
  • Si vogliono architetture scalabili e resilienti.
  • Si vuole evitare di creare un bilanciamento del carico personalizzato.

Diagramma che mostra la sottoscrizione condivisa in cui un topic distribuisce i messaggi tra più consumatori per l'elaborazione parallela.