MQTT-Nachrichten in Azure Event Grid weiterleiten

Event Grid ermöglicht es Ihnen, Ihre MQTT-Nachrichten an Azure-Dienste oder Webhooks zur weiteren Verarbeitung weiterzuleiten. Durch das Routing dieser Daten können Sie End-to-End-Lösungen erstellen, die Ihre IoT-Daten für Analyse, Speicherung und Visualisierung nutzen.

Dieser Artikel erklärt, wann Routing verwendet werden sollte, und zeigt Ihnen, wie Sie Routing entweder für ein Event Grid Namespace-Thema oder ein benutzerdefiniertes Thema konfigurieren können.

Diagramm, das zeigt, wie MQTT-Nachrichten von Geräten über Azure Event Grid zu Handlern wie Azure-Diensten, Webhooks und Apps geleitet werden.

Wann Routing verwendet werden sollte

Die Weiterleitung der Nachrichten von Ihren Kunden an einen Azure-Dienst oder Ihren benutzerdefinierten Endpunkt hilft Ihnen, die Vorteile dieser Daten optimal zu nutzen. Die folgende Liste beschreibt einige der vielen Anwendungsfälle für diese Funktion:

  • Datenanalyse: Extrahieren und analysieren Sie die weitergeleiteten Nachrichten Ihrer Kunden, um Ihre Lösung zu optimieren. Analysieren Sie zum Beispiel die Telemetrie Ihrer Maschinen, um vorherzusagen, wann Wartungsarbeiten geplant werden sollten, bevor Fehler auftreten, um Verzögerungen und weitere Schäden zu vermeiden.
  • Serverless-Anwendungen: Lösen Sie anhand der weitergeleiteten Nachrichten Ihrer Clients eine Serverless-Funktion aus. Wenn zum Beispiel ein Bewegungsmelder eine Bewegung erkennt, senden Sie eine Benachrichtigung an das Sicherheitspersonal, um diese zu adressieren.
  • Datenvisualisierungen: Erstellen Sie Visualisierungen der gerouteten Daten Ihrer Kunden, um die Daten darzustellen und zu verstehen sowie Trends und Ausreißer hervorzuheben.

Konfigurieren des Routings

Die Routing-Konfiguration ermöglicht es, alle MQTT-Nachrichten von deinen Clients entweder an ein Event Grid Namespace-Thema oder ein Event Grid-benutzerdefiniertes Thema zu senden. Nachdem die Nachrichten im Thema sind, können Sie ein Ereignisabonnement konfigurieren, um die Nachrichten aus dem Thema zu konsumieren. Führen Sie die folgenden allgemeinen Schritte aus, um diese Konfiguration zu erreichen:

  • Namespacethema als Routingziel:
    • Erstellen Sie ein Event Grid Namespace-Thema, bei dem Event Grid alle MQTT-Nachrichten leitet.
    • Erstellen Sie ein Push-Event-Abonnement, um diese Nachrichten an einen der unterstützten Azure-Dienste oder einen eigenen Webhook weiterzuleiten, oder erstellen Sie ein Warteschlangen-Event-Abonnement, um die Nachrichten direkt aus dem Namespace-Thema durch Ihre Anwendung zu ziehen.
    • Setze die Routing-Konfiguration , die sich auf das Thema bezieht, das du im ersten Schritt erstellt hast.

Diagramm des MQTT-Nachrichtenroutings zu Namespacethemen.

Diagramm des MQTT-Nachrichtenroutings an benutzerdefinierte Themen.

Hinweis

Das Deaktivieren des öffentlichen Netzwerkzugriffs im Namensraum führt dazu, dass das MQTT-Routing fehlschlägt.

Unterschied zwischen Namespacethemen und benutzerdefinierten Themen als Routingziel

Die folgende Tabelle zeigt den Unterschied zwischen Namespacethemen und benutzerdefinierten Themen als Routingziel. Eine detaillierte Aufschlüsselung der Quoten und Grenzen, die jede Event Grid-Ressource umfasst, finden Sie unter Quoten und Grenzen.

Vergleichspunkt Namespace-Thema Benutzerdefiniertes Thema
Durchsatz Hoch, bis zu 40 MB/s (Eingang) und 80 MB/s (Ausgang) Niedrig: bis zu 5 MB/s (Eingang und Ausgang)
Pull-Übermittlung Ja No
Pushübermittlung an Event Hubs Ja Ja
Push-Bereitstellung an Azure-Dienste (Funktionen, Webhooks, Service Bus-Warteschlangen und -Themen, hybride Relay-Verbindungen und Speicherwarteschlangen) No Ja
Nachrichtenaufbewahrung 7 Tage 1 Tag
Rollenzuweisungsanforderung Nicht nötig, da der MQTT-Broker und das Namespace-Thema unter demselben Namespace liegen Erforderlich, weil der Namespace, der die MQTT-Broker-Funktionalität hostet, und das benutzerdefinierte Thema unterschiedliche Ressourcen sind

Anforderungen für benutzerdefinierte Event-Grid-Themen beim Routing

Das benutzerdefinierte Event Grid Thema, das Sie für Routing verwenden, muss folgende Anforderungen erfüllen:

  • Es muss das CloudEvents-Schema v1.0 verwenden.
  • Er muss sich in derselben Region wie der Namespace befinden.
  • Sie müssen die Rolle des Event Grid Data Sender entweder selbst oder der ausgewählten verwalteten Identität im Event Grid Custom Topic zuweisen, bevor Sie die Routing-Konfiguration anwenden. Um die Rolle zuzuweisen:
    1. Im Portal gehe du zur von dir erstellten Event-Grid-Themenressource.
    2. Im Menü Access Control (IAM) wählen Sie Rollenzuweisung hinzufügen.
    3. Wählen Sie auf der Registerkarte RolleEvent Grid Data Sender aus, und wählen Sie dann Weiter aus.
    4. Im Reiter Mitglieder wählen Sie Mitglieder auswählen und geben Sie dann Ihren Microsoft Entra-Benutzernamen in das Auswählen-Feld ein, das erscheint (zum Beispiel, user@contoso.com).
    5. Wählen Sie Ihren Microsoft Entra-Benutzernamen aus und wählen Sie dann Überprüfen + zuweisen.

Konfiguration des Azure-Portals

Um das Routing zu konfigurieren:

  1. Navigieren Sie im Azure-Portal zu Ihrem Namespace.
  2. Wählen Sie unter Routing die Option Routing aktivieren aus.
  3. Für den Thementyp wählen Sie entweder Namespace-Thema oder Benutzerdefiniertes Thema.
  4. Für Thema wählen Sie das von Ihnen erstellte Thema, auf dem alle MQTT-Nachrichten weitergeleitet werden.
  5. Wenn Sie ein benutzerdefiniertes Thema auswählen, erscheint der Abschnitt "Verwaltete Identität für die Lieferung ". Wählen Sie eine der folgenden Optionen für die Identität aus, die den MQTT-Broker authentifiziert, während er die MQTT-Nachrichten an das benutzerdefinierte Thema liefert:
    • Keine: Weise dir für das benutzerdefinierte Thema die Rolle Event Grid Data Sender zu.
    • Systemzugewiesene Identität: Aktivieren Sie die systemzugewiesene Identität im Namensraum als Voraussetzung und weisen Sie die Rolle Event Grid Data Sender der systemzugewiesenen Identität auf dem benutzerdefinierten Thema zu.
    • Benutzerzugewiesene Identität: Aktivieren Sie die benutzerdefinierte Identität im Namensraum als Voraussetzung und weisen Sie die Event-Grid Data Sender-Rolle der ausgewählten Identität auf dem benutzerdefinierten Thema zu. Wenn Sie Benutzer-zugewiesene Identität auswählen, erscheint ein Dropdown-Menü, mit dem Sie die Identität auswählen können.
  6. Wählen Sie Anwenden.

Screenshot, der die Routing-Konfiguration über das Portal zeigt.

Anweisungen zur Anreicherungskonfiguration finden Sie in der Konfiguration des Anreicherungsportals.

Azure CLI-Konfiguration

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 akzeptiert typeNone, SystemAssigned oder UserAssigned. Legen Sie userAssignedIdentity nur fest, wenn typeUserAssigned ist.

Für Anreicherungskonfigurationsanweisungen wechseln Sie zur Konfiguration der Anreicherungs-CLI.

MQTT-Nachrichtenroutingverhalten

Während des Routings von MQTT-Nachrichten zu benutzerdefinierten Themen sorgt Event Grid für eine dauerhafte Zustellung, da es versucht, jede Nachricht mindestens einmal sofort zu übermitteln. Wenn es einen Fehler gibt, versucht Event Grid entweder die Zustellung erneut oder verwirft die für die Weiterleitung vorgesehene Nachricht. Event Grid garantiert keine Reihenfolge für die Ereignisübermittlung, sodass Abonnenten sie möglicherweise nicht in der richtigen Reihenfolge erhalten.

In der folgenden Tabelle wird das Verhalten des MQTT-Nachrichtenroutings basierend auf unterschiedlichen Fehlern beschrieben.

Fehler Fehlerbeschreibung Verhalten
TopicNotFoundError Das benutzerdefinierte Thema, das für den Empfang aller MQTT-gerouteten Nachrichten konfiguriert war, wurde gelöscht. Event Grid entfernt die MQTT-Nachricht, die für das Routing gedacht war.
AuthenticationError Die Rolle "Ereignisrasterdatensender" für das benutzerdefinierte Thema, das als Ziel für MQTT weitergeleitete Nachrichten konfiguriert wurde, wurde gelöscht. Event Grid entfernt die MQTT-Nachricht, die für das Routing gedacht war.
Zu viele Anfragen Die Anzahl der mqTT-weitergeleiteten Nachrichten pro Sekunde überschreitet den Veröffentlichungsgrenzwert für das benutzerdefinierte Thema. Event Grid versucht erneut, die MQTT-Nachricht weiterzuleiten.
Dienstfehler Unerwarteter Serverfehler für den Betriebsgrund eines Servers. Event Grid versucht erneut, die MQTT-Nachricht weiterzuleiten.

Bei Wiederholungen verwendet Event Grid eine exponentielle Backoff-Wiederholungsrichtlinie für das MQTT-Nachrichtenrouting. Event Grid versucht die Zustellung nach folgendem Zeitplan nach bestem Bemühen zu wiederholen:

  • 10 Sekunden
  • 30 Sekunden
  • 1 Minute
  • 5 Minuten
  • 10 Minuten
  • 30 Minuten
  • 1 Stunde
  • 3 Stunden
  • 6 Stunden
  • Alle 12 Stunden

Wenn die erneute Zustellung einer gerouteten MQTT-Nachricht, die zur erneuten Zustellung in der Warteschlange steht, erfolgreich ist, versucht Event Grid, die Nachricht nach besten Kräften aus der Wiederholungswarteschlange zu entfernen, aber Sie können dennoch doppelte Nachrichten empfangen.