Übersicht über freigegebene Abonnements in Azure Event Grid MQTT Broker

Shared-Abonnements in Azure Event Grid MQTT Broker sind ein messaging-Muster mit dem mehrere Clients Nachrichten aus einem einzelnen Themenabonnement als Gruppe nutzen können, sodass der Broker Nachrichten auf lastenausgleichsbasierte Weise über Clients verteilen kann. Anstelle, dass jeder Abonnent jede Nachricht empfängt, empfängt nur ein Client innerhalb der freigegebenen Gruppe jede Nachricht, wodurch die Skalierbarkeit und der Durchsatz für Verarbeitungssysteme im Backend verbessert werden.

Funktionsweise von freigegebenen Abonnements

In einem standardmäßigen MQTT-Abonnement erhält jeder abonnierte Client eine Kopie jeder Nachricht. Bei geteilten Abonnements behandelt der Broker eine Gruppe von Clients als einen einzigen logischen Abonnenten und verteilt Nachrichten unter ihnen.

  • Jede Anwendungsnachricht, die dem freigegebenen Filter entspricht, wird nur an eine aktive Sitzung innerhalb der Gruppe übermittelt.
  • Die Verteilung erfolgt normalerweise zufällig innerhalb der Gruppe durch Lastverteilung.
  • Eine Clientsitzung kann gleichzeitig sowohl freigegebene als auch nicht freigegebene Abonnements enthalten.
  • Mehrere Gruppen können dasselbe Thema unabhängig voneinander abonnieren.

Format für gemeinsame Abonnementthemen

Freigegebene Abonnements verwenden das folgende Format:

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

Komponenten:

  • $share → Identifiziert ein gemeinsames Abonnement
  • {group-name} → logische Consumergruppe
  • {topic-filter} → Thema oder Wildcardabonnement

Beispiel:

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

Wichtige Merkmale

  • Lastenausgleichsverbrauch: Nachrichten werden über Clients in derselben Gruppe verteilt, um eine effiziente Verarbeitung sicherzustellen.
  • Horizontale Skalierbarkeit: Verbraucher können unabhängig voneinander skaliert werden, ohne dass sich dies auf die Herausgeber auswirkt.
  • Unabhängige Consumergruppen: Mehrere geteilte Gruppen empfangen die gleichen Nachrichten unabhängig voneinander, während sie intern eine Balance halten.
  • Gemischte Abonnementunterstützung: Ein Client kann sowohl freigegebene als auch nicht freigegebene Abonnements in derselben Sitzung verwalten.

Beispielszenario: Verarbeitung von Einzelhandelsbestellungen

Betrachten Sie ein Szenario für die Verarbeitung von Einzelhandelsbestellungen mithilfe des Event Grid MQTT Brokers:

  • Thema: retail/orders
  • Freigegebene Gruppe: order-workers
  • Klienten: Worker1, Worker2, Worker3

Fluss:

  1. Bestellungen werden veröffentlicht an retail/orders
  2. Alle Mitarbeiter abonnieren Folgendes: $share/order-workers/retail/orders
  3. Event Grid MQTT Broker verteilt:
    • Auftrag 1 → Worker1
    • Auftrag 2 → Arbeiter2
    • Auftrag 3 → Worker3

Jede Bestellung wird einmal verarbeitet, während das System horizontal skaliert wird.

Diagramm des Event Grid MQTT Brokers, der drei Einzelaufträge an drei Mitarbeiter verteilt, indem er die gemeinsame Abonnementgruppe Order-Workers verwendet.

Protokollverhalten und Einschränkungen

MQTT-Versionsunterstützung

  • Feature nur MQTT 5
  • MQTT 3.1.1-Clients, die $share/... versuchen, werden getrennt

Semantik der Nachrichtenübermittlung

  • Jede Nachricht wird an einen Client pro Gruppe übermittelt.
  • Die Bereitstellung folgt der Semantik 'at-least-once' (QoS 1)

Nachrichtensortierung

  • Keine strikte Reihenfolgegarantie für Gruppenmitglieder

Sitzungsverhalten

  • Der Sitzungsablauf wirkt sich auf die Nachrichtenübermittlung aus:
    • Wenn ein Client die Verbindung trennt und die Sitzung abläuft, werden Nachrichten möglicherweise erneut zugewiesen.
    • Dauerhafte Sitzungen verbessern die Zuverlässigkeit

Anwendungsfälle im Event Grid MQTT-Broker

Geteilte Abonnements eignen sich ideal für:

  • IoT-Telemetrieverarbeitung mit hohem Durchsatz: Verteilen von Telemetrie oder Ereignissen über mehrere Verarbeitungsdienste hinweg.
  • Backend-Workerpools / Microservices: Sie ermöglichen zustandslosen Diensten, Ereignisse ohne Duplizierung zu verarbeiten.
  • Unified Namespace (UNS)-Consumer: Effiziente Nutzung industrieller Datenströme mit hohem Durchsatz.

Wann man freigegebene Abonnements verwenden sollte

Verwenden Sie freigegebene Abonnements, wenn:

  • Sie benötigen parallele Nachrichtenverarbeitung.
  • Ein einzelner Verbraucher kann die Last nicht verarbeiten.
  • Sie möchten skalierbare und robuste Architekturen.
  • Sie möchten das Erstellen eines benutzerdefinierten Lastenausgleichs vermeiden.

Diagramm mit freigegebenem Abonnement, in dem ein Thema Nachrichten für mehrere Verbraucher zur parallelen Verarbeitung verteilt.