MQTT-berichten routeren in Azure Event Grid

Event Grid laat je je MQTT-berichten routeren naar Azure-diensten of webhooks voor verdere verwerking. Door deze data te routeren, kun je end-to-end oplossingen bouwen die je IoT-data gebruiken voor analyse, opslag en visualisatie.

Dit artikel legt uit wanneer routing te gebruiken en laat zien hoe je routing kunt configureren voor een Event Grid namespace-onderwerp of een aangepast onderwerp.

Diagram dat laat zien hoe MQTT-berichten van apparaten via Azure Event Grid naar handlers zoals Azure-services, webhooks en apps worden geleid.

Wanneer routering te gebruiken

Het routeren van de berichten van je klanten naar een Azure-dienst of je aangepaste endpoint helpt je om de voordelen van deze data te maximaliseren. De volgende lijst beschrijft enkele van de vele gebruiksscenario's voor deze functie:

  • Data-analyse: Haal de gerouteerde berichten van je klanten eruit en analyseer ze om je oplossing te optimaliseren. Analyseer bijvoorbeeld de telemetrie van je machines om te voorspellen wanneer onderhoud moet worden gepland voordat er storingen optreden, om vertragingen en verdere schade te voorkomen.
  • Serverless applicaties: Activeer een serverless functie op basis van de gerouteerde berichten van je clients. Stuur bijvoorbeeld een melding naar beveiligingspersoneel wanneer een bewegingssensor beweging detecteert, zodat zij kunnen ingrijpen.
  • Datavisualisaties: Bouw visualisaties van de doorgestuurde data van je klanten om de data te representeren en te begrijpen, en om trends en uitschieters te benadrukken.

Routering configureren

De routeringsconfiguratie laat je al je MQTT-berichten van je clients sturen naar een Event Grid namespace-topic of een Event Grid-custom topic. Nadat de berichten in het onderwerp staan, kunt u een gebeurtenisabonnement configureren om de berichten van het onderwerp te gebruiken. Gebruik de volgende stappen op hoog niveau om deze configuratie te bereiken:

  • Namespace als routeringsbestemming.
    • Maak een Event Grid namespace-onderwerp aan waarbij Event Grid alle MQTT-berichten routeert.
    • Maak een push-type event-abonnement aan om deze berichten te routeren naar een van de ondersteunde Azure-diensten of een aangepaste webhook, of maak een queue-type event-abonnement om de berichten rechtstreeks uit het namespace-onderwerp via je applicatie te halen.
    • Stel de routeringsconfiguratie in die verwijst naar het onderwerp dat je in de eerste stap hebt aangemaakt.

Diagram van de MQTT-berichtroutering naar naamruimteonderwerpen.

Diagram van de MQTT-berichtroutering naar aangepaste onderwerpen.

Opmerking

Het uitschakelen van publieke netwerktoegang op de namespace veroorzaakt dat de MQTT-routering faalt.

Verschil tussen naamruimteonderwerpen en aangepaste onderwerpen als routeringsbestemming

In de volgende tabel ziet u het verschil tussen naamruimteonderwerpen en aangepaste onderwerpen als routeringsbestemming. Voor een gedetailleerde uitsplitsing van welke quota en limieten elke Event Grid-resource bevat, zie Quota en limieten.

Vergelijkingspunt Onderwerp namespace Aangepast onderwerp
doorvoersnelheid Hoog, tot 40 MB/s (inkomend) en 80 MB/s (uitgaand verkeer) Laag, maximaal 5 MB/s (inkomend en uitgaand verkeer)
Pull-levering (waarbij de ontvanger de levering initieert) Ja No
Push-levering naar Event Hubs Ja Ja
Pushlevering naar Azure-services (Functions, Webhooks, Service Bus-wachtrijen en -onderwerpen, hybride verbindingen en opslagwachtrijen doorsturen) No Ja
Bewaarperiode van berichten 7 dagen 1 dag
Vereiste voor roltoewijzing Niet nodig omdat de MQTT-broker en het namespace-onderwerp onder dezelfde namespace vallen Vereist omdat de naamruimte die de MQTT broker-functionaliteit host en het aangepaste onderwerp verschillende bronnen zijn

Aangepaste Event Grid-onderwerpvereisten voor routering

Het Event Grid custom topic dat je gebruikt voor routering moet aan de volgende eisen voldoen:

  • Het moet het CloudEvents-schema v1.0 gebruiken.
  • Deze moet zich in dezelfde regio bevinden als de naamruimte.
  • Je moet de rol Event Grid Data Sender aan jezelf toewijzen of aan de geselecteerde beheerde identiteit op het Event Grid custom topic voordat je de routingconfiguratie toepast. Om de rol toe te wijzen:
    1. Ga in het portaal naar de Event Grid-thema-resource die je hebt aangemaakt.
    2. Selecteer in het menu Toegangscontrole (IAM)roltoewijzing toevoegen.
    3. Selecteer op het tabblad RolEvent Grid Data Sender en selecteer vervolgens Volgende.
    4. Selecteer op het tabblad LedenLeden selecteren en voer vervolgens je Microsoft Entra-gebruikersnaam in het Selecteren-vak in dat verschijnt (bijvoorbeeld user@contoso.com).
    5. Selecteer je Microsoft Entra-gebruikersnaam en selecteer vervolgens Beoordelen + toewijzen.

Configuratie van Azure Portal

Om routering te configureren:

  1. Ga naar uw naamruimte in Azure Portal.
  2. Selecteer onder RoutingRouting inschakelen.
  3. Voor Onderwerptype selecteer je ofwel Namespace-onderwerp of Aangepast onderwerp.
  4. Selecteer voor Topic het topic dat je hebt aangemaakt waar alle MQTT-berichten naartoe worden gestuurd.
  5. Als je een aangepast onderwerp selecteert, wordt de sectie Beheerde identiteit voor levering weergegeven. Selecteer een van de volgende opties voor de identiteit die de MQTT-broker authenticeert terwijl deze de MQTT-berichten aan het aangepaste onderwerp levert:
    • Geen: Wijs jezelf de Event Grid Data Sender-rol toe voor het aangepaste onderwerp.
    • Systeemtoegewezen identiteit: Schakel systeemtoegewezen identiteit in voor de naamruimte als vereiste en wijs de Event Grid Data Sender-rol toe aan de systeemtoegewezen identiteit voor het aangepaste onderwerp.
    • Gebruikers-toegewezen identiteit:Schakel de gebruikers-toegewezen identiteit in de naamruimte in als vereiste en wijs de rol Event Grid Data Sender toe aan de geselecteerde identiteit op het aangepaste onderwerp. Als je Gebruikers-toegewezen identiteit selecteert, verschijnt er een dropdown zodat je de identiteit kunt selecteren.
  6. Selecteer de optie Toepassen.

Screenshot van de routeringsconfiguratie via het portaal.

Voor configuratie-instructies voor verrijkingen gaat u naar de configuratie van de verrijkingsportal.

Azure CLI-configuratie

az resource create --resource-type Microsoft.EventGrid/namespaces --id /subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.EventGrid/namespaces/<Namespace Name> --is-full-object --api-version 2023-06-01-preview --properties @./resources/NS.json

NS.json

{
    "properties": {
        "inputSchema": "CloudEventSchemaV1_0",
        "topicSpacesConfiguration": {
            "state": "Enabled",
            "routeTopicResourceId": "/subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.EventGrid/topics/<Event Grid topic name>",
            "routingIdentityInfo": {
                "type": "UserAssigned",
                "userAssignedIdentity": "/subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<User-assigned identity>"
            }
        }
    }
}

In routingIdentityInfo accepteert Nonetype, SystemAssigned of UserAssigned. Stel userAssignedIdentity alleen in wanneer typeUserAssigned is.

Ga voor configuratie-instructies voor verrijkingen naar de Enrichment CLI-configuratie.

MQTT-berichtrouteringsgedrag

Tijdens het routeren van MQTT-berichten naar aangepaste onderwerpen zorgt Event Grid voor duurzame levering, omdat het probeert elk bericht ten minste één keer onmiddellijk te bezorgen. Als er een storing is, probeert Event Grid het opnieuw te bezorgen of laat het bericht vallen dat bedoeld was voor routering. Event Grid garandeert geen volgorde voor het leveren van gebeurtenissen, waardoor abonnees ze mogelijk in de verkeerde volgorde ontvangen.

De volgende tabel beschrijft het gedrag van MQTT-berichtroutering op basis van verschillende fouten.

Fout Foutbeschrijving Gedrag
TopicNotFoundError Het aangepaste onderwerp dat was geconfigureerd om alle MQTT-routerde berichten te ontvangen, werd verwijderd. Event Grid laat het MQTT-bericht vallen dat bedoeld was voor routering.
AuthenticationError De rol van gegevenszender in Event Grid voor het aangepaste onderwerp dat als bestemming is geconfigureerd voor via MQTT gerouteerde berichten, is verwijderd. Event Grid laat het MQTT-bericht vallen dat bedoeld was voor routering.
TeVeelVerzoeken Het aantal door MQTT gerouteerde berichten per seconde overschrijdt de publicatielimiet voor het aangepaste onderwerp. Event Grid probeert het MQTT-bericht opnieuw te routeren.
Servicefout Een onverwachte serverfout vanwege de operationele reden van een server. Event Grid probeert het MQTT-bericht opnieuw te routeren.

Tijdens nieuwe pogingen gebruikt Event Grid een beleid voor exponentieel uitstel voor MQTT-berichtroutering. Event Grid probeert de levering volgens de volgende planning opnieuw uit te voeren op basis van best effort:

  • 10 seconden
  • 30 seconden
  • 1 minuut
  • 5 minuten
  • 10 minuten
  • 30 minuten
  • 1 uur
  • 3 uur
  • 6 uur
  • Om de 12 uur

Als een gerouteerd MQTT-bericht dat in de wachtrij staat voor herlevering slaagt, probeert Event Grid het bericht uit de herkansingswachtrij te verwijderen op basis van best effort, maar je kunt nog steeds duplicaten ontvangen.