Overzicht van gedeelde abonnementen in Azure Event Grid MQTT Broker

Shared subscriptions in Azure Event Grid MQTT Broker zijn een messaging pattern waarmee meerdere clients berichten uit één onderwerpabonnement als groep kunnen gebruiken, zodat de broker berichten op een taakverdeling kan distribueren. In plaats van elke abonnee die elk bericht ontvangt, ontvangt slechts één client binnen de gedeelde groep elk bericht, waardoor de schaalbaarheid en doorvoer voor back-endverwerkingssystemen wordt verbeterd.

Hoe gedeelde abonnementen werken

In een standaard MQTT-abonnement ontvangt elke geabonneerde client een kopie van elk bericht. Met gedeelde abonnementen behandelt de broker een groep clients als één logische abonnee en distribueert deze berichten.

  • Elk toepassingsbericht dat overeenkomt met het gedeelde filter wordt slechts aan één actieve sessie binnen de groep geleverd
  • Distributie wordt doorgaans op een willekeurige basis in de groep verdeeld.
  • Een clientsessie kan zowel gedeelde als niet-gedeelde abonnementen tegelijk bevatten
  • Meerdere groepen kunnen zich afzonderlijk abonneren op hetzelfde onderwerp

Indeling van gedeeld abonnementsonderwerp

Gedeelde abonnementen gebruiken de volgende indeling:

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

Onderdelen:

  • $share → Identificeert een gedeeld abonnement
  • {group-name} logische consumentengroep →
  • → Abonnement op onderwerp of jokerteken

Example:

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

Belangrijkste kenmerken

  • Verbruik met gelijke taakverdeling: berichten worden verdeeld over clients in dezelfde groep om een efficiënte verwerking te garanderen.
  • Horizontale schaalbaarheid: consumenten kunnen onafhankelijk uitbreiden zonder invloed te hebben op uitgevers.
  • Onafhankelijke consumptiegroepen: meerdere gedeelde groepen ontvangen dezelfde berichten onafhankelijk terwijl ze intern in balans worden gehouden.
  • Ondersteuning voor gemengde abonnementen: een client kan zowel gedeelde als niet-gedeelde abonnementen in dezelfde sessie onderhouden.

Voorbeeldscenario: Verwerking van retailorders

Overweeg een scenario voor het verwerken van retailorders met Event Grid MQTT Broker:

  • Onderwerp: retail/orders
  • Gedeelde groep: order-workers
  • Klanten: Worker1, Worker2, Worker3

Stroom:

  1. Orders worden gepubliceerd naar retail/orders
  2. Alle werknemers abonneren zich op: $share/order-workers/retail/orders
  3. Event Grid MQTT Broker distribueert:
    • Bestelling 1 → Worker1
    • Volgorde 2 → Worker2
    • Volgorde 3 → Worker3

Elke order wordt eenmaal verwerkt, terwijl het systeem horizontaal wordt geschaald.

Diagram van Event Grid MQTT Broker waarbij drie retailorders worden gedistribueerd naar drie werknemers met behulp van groepsordermedewerkers voor gedeelde abonnementen.

Protocolgedrag en -beperkingen

Ondersteuning voor MQTT-versie

  • Alleen voor MQTT 5-functie
  • MQTT 3.1.1-clients die proberen $share/... zullen worden verbroken

Semantiek voor berichtbezorging

  • Elk bericht wordt bezorgd bij één client per groep
  • Levering volgt de at-least-once semantiek (QoS 1)

Berichtvolgorde

  • Geen strikte bestelgarantie voor groepsleden

Sessiegedrag

  • Sessieverloop is van invloed op de bezorging van berichten:
    • Als een client de verbinding verbreekt en de sessie verloopt, kunnen berichten opnieuw worden toegewezen
    • Permanente sessies verbeteren de betrouwbaarheid

Toepassingsgevallen in Event Grid MQTT Broker

Gedeelde abonnementen zijn ideaal voor:

  • IoT-telemetrieverwerking met hoge doorvoer: telemetrie of gebeurtenissen distribueren over meerdere verwerkingsservices.
  • Back-endwerkrolgroepen/microservices: schakel stateless services in om gebeurtenissen zonder duplicatie te verwerken.
  • Uns-gebruikers (Unified Namespace): verbruik efficiënt industriële gegevensstromen met hoge doorvoer.

Wanneer u gedeelde abonnementen gebruikt

Gedeelde abonnementen gebruiken wanneer:

  • U hebt parallelle berichtverwerking nodig.
  • Een enkele gebruiker kan de belastingscapaciteit niet verwerken.
  • U wilt schaalbare en flexibele architecturen.
  • U wilt voorkomen dat u aangepaste load balancing implementeert.

Diagram van een gedeeld abonnement waarin een onderwerp berichten over meerdere consumenten distribueert voor parallelle verwerking.