Routing von MQTT-Nachrichten in Azure Event Grid

Mit Event Grid können Sie Ihre MQTT-Nachrichten zur weiteren Verarbeitung an Azure-Dienste oder Webhooks weiterleiten. Dementsprechend können Sie End-to-End-Lösungen erstellen, indem Sie Ihre IoT-Daten unter anderem für Datenanalysen, Speicherung und Visualisierungen verwenden.

Diagram of the MQTT message routing.

Wie kann ich das Feature „Routing“ verwenden?

Wenn Sie die Nachrichten Ihrer Clients an einen Azure-Dienst oder Ihren benutzerdefinierten Endpunkt weiterleiten, können Sie den Nutzen dieser Daten maximieren. Im Folgenden finden Sie einige von vielen Anwendungsfällen, in denen Sie dieses Feature verwenden können:

  • Datenanalyse: Extrahieren und analysieren Sie die weitergeleiteten Nachrichten von Ihren Clients, um Ihre Lösung zu optimieren. Analysieren Sie z. B. die Telemetrie Ihrer Computer, um vorherzusagen, wann die Wartung geplant werden muss, bevor es zu Ausfällen kommt, um Verzögerungen und weitere Schäden zu vermeiden.
  • Serverlose Anwendungen: Lösen Sie eine serverlose Funktion auf der Grundlage der von Ihren Clients weitergeleiteten Nachrichten aus. Wenn z. B. ein Bewegungssensor eine Bewegung erkennt, senden Sie eine Benachrichtigung an das Sicherheitspersonal, damit dieses sich darum kümmert.
  • Datenvisualisierungen: Erstellen Sie Visualisierungen der von Ihren Clients übermittelten Daten, um die Daten einfach darzustellen und zu verstehen sowie Trends und Ausreißer hervorzuheben.

Routingkonfiguration:

Mit der Routingkonfiguration können Sie alle MQTT-Nachrichten von Ihren Clients an ein Event Grid-Namespacethema oder ein benutzerdefiniertes Event Grid-Thema senden. Sobald sich die Nachrichten im Thema befinden, können Sie ein Ereignisabonnement konfigurieren, um die Nachrichten aus dem Thema zu nutzen. Verwenden Sie die folgenden einfachen Schritte, um diese Konfiguration zu erreichen:

  • Namespacethema als Routingziel:
    • Erstellen Sie ein benutzerdefiniertes Event Grid-Thema, an das alle MQTT-Nachrichten weitergeleitet werden sollen.
    • Erstellen Sie ein Ereignisabonnement vom Pushtyp, um diese Nachrichten an einen der unterstützten Azure-Dienste oder einen benutzerdefinierten Webhook oder ein Ereignisabonnement des Warteschlangentyps weiterzuleiten, um die Nachrichten direkt aus dem Namespacethema über Ihre Anwendung abzurufen.
    • Legen Sie die Routingkonfiguration fest, die sich auf das Thema bezieht, das Sie im ersten Schritt erstellt haben.

Diagram of the MQTT message routing to namespace topics.

Diagram of the MQTT message routing to custom topics.

Hinweis

Wenn der öffentliche Netzwerkzugriff für den Namespace deaktiviert wird, funktioniert das MQTT-Routing nicht.

Unterschied zwischen Namespacethemen und benutzerdefinierten Themen als Routingziel

In der folgenden Tabelle sind die Unterschiede zwischen Namespacethemen und benutzerdefinierten Themen als Routingziel aufgeführt. Eine detaillierte Aufschlüsselung, welche Kontingente und Grenzwerte in den einzelnen Event Grid-Ressourcen enthalten sind, finden Sie unter Kontingente und Grenzwerte.

Ort des Vergleichs Namespacethema Benutzerdefiniertes Thema
Throughput Hoch, bis zu 40 MB/s (eingehend) und 80 MB/s (ausgehend) Niedrig, bis zu 5 MB/s (eingehend und ausgehend)
Pullübermittlung Ja
Pushübermittlung an Event Hubs Ja (in der Vorschauversion) Ja
Pushübermittlung an Azure-Dienste (Funktionen, Webhooks, Service Bus-Warteschlangen und -Themen, hybride Relayverbindungen und Speicherwarteschlangen) Ja
Nachrichtenaufbewahrung 7 Tage 1 Tag
Anforderung an Rollenzuweisung Nicht erforderlich, da der MQTT-Broker und das Namespacethema unter demselben Namespace liegen Erforderlich, da der Namespace, der die MQTT-Brokerfunktionalität hostet, und das benutzerdefinierte Thema unterschiedliche Ressourcen sind

Anforderungen an benutzerdefinierte Event Grid-Themen für das Routing

Das benutzerdefinierte Event Grid-Thema, das für das Routing verwendet wird, muss die folgenden Anforderungen erfüllen:

  • Es muss für die Verwendung von Cloudereignisschema v1.0 festgelegt werden.
  • Es muss sich in derselben Region wie der Namespace befinden.
  • Sie müssen sich selbst oder der ausgewählten verwalteten Identität im benutzerdefinierten Event Grid-Thema die Rolle „EventGrid-Datensender“ zuweisen, bevor die Routingkonfiguration angewendet wird.
    • Navigieren Sie im Portal zur erstellten Event Grid-Themenressource.
    • Wählen Sie im Menüelement „Zugriffssteuerung (IAM)“ die Option „Rollenzuweisung hinzufügen“ aus.
    • Wählen Sie auf der Registerkarte „Rolle“ die Option „EventGrid-Datensender“ und dann „Weiter“ aus.
    • Wählen Sie auf der Registerkarte „Mitglieder“ die Option „+Mitglieder auswählen“ aus, und geben Sie dann Ihren AD-Benutzernamen in das Feld „Auswählen“ ein, das daraufhin angezeigt wird (z. B. user@contoso.com).
    • Wählen Sie Ihren AD-Benutzernamen und dann „Überprüfen und zuweisen“ aus.

Konfiguration des Azure-Portals

Verwenden Sie die folgenden Schritte, um das Routing zu konfigurieren:

  • Navigieren Sie im Azure-Portal zu Ihrem Namespace.
  • Aktivieren Sie unter „Routing“ die Option „Routing aktivieren“.
  • Wählen Sie unter Thementyp entweder Namespacethema oder Benutzerdefiniertes Thema aus.
  • Wählen Sie unter „Thema“ das erstellte Event Grid-Thema aus, an das alle MQTT-Nachrichten weitergeleitet werden.
  • Wenn ein benutzerdefiniertes Thema ausgewählt wurde, wird der Abschnitt „Verwaltete Identität für Zustellung“ angezeigt. Wählen Sie eine der folgenden Optionen für die Identität aus, die zum Authentifizieren des MQTT-Brokers beim Übermitteln der MQTT-Nachrichten an das benutzerdefinierte Thema verwendet wird:
    • Hinweis: In diesem Fall müssen sich die Rolle „EventGrid-Datenabsender“ im benutzerdefinierten Thema zuweisen.
    • Systemseitig zugewiesene Identität: In diesem Fall müssen Sie die systemseitig zugewiesene Identität im Namespace als Voraussetzung aktivieren und die Rolle „EventGrid-Datensender“ der systemseitig zugewiesenen Identität im benutzerdefinierten Thema zuweisen.
    • Benutzerseitig zugewiesene Identität: In diesem Fall müssen Sie die benutzerseitig zugewiesene Identität im Namespace als Voraussetzung aktivieren und die Rolle „EventGrid-Datensender“ der benutzerseitig zugewiesenen Identität im benutzerdefinierten Thema zuweisen.
      • Wenn die benutzerseitig zugewiesene Identität ausgewählt wurde, wird eine Dropdownliste angezeigt, damit Sie die gewünschte Identität auswählen können.
  • Wählen Sie Übernehmen.

Screenshot showing the routing configuration through the portal.

Anleitungen zur Konfiguration von Anreicherungen finden Sie unter 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", //Allowed values: None, SystemAssigned, UserAssigned
                "userAssignedIdentity": "/subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<User-assigned identity>" //needed only if UserAssigned was the value of type
            },

	}
}

Anweisungen zur Konfiguration von Anreicherungen finden Sie unter Konfiguration der Befehlszeilenschnittstelle für die Anreicherung.

MQTT-Nachrichtenroutingverhalten

Beim Routing von MQTT-Nachrichten an benutzerdefinierte Themen bietet Event Grid eine robuste Zustellung, da versucht wird, jede Nachricht mindestens einmal sofort zu übermitteln. Wenn ein Fehler auftritt, versucht Event Grid entweder die Zustellung oder legt die Nachricht ab, die weitergeleitet werden soll. Bei der Ereignisübermittlung durch Event Grid wird unter Umständen die Reihenfolge nicht eingehalten, sodass Abonnenten die Ereignisse ggf. 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 Nachrichten mit MQTT-Routing konfiguriert ist, wurde gelöscht. Event Grid legt die MQTT-Nachricht ab, die weitergeleitet werden soll.
AuthenticationError Die Rolle „EventGrid Data Sender“ für das benutzerdefinierte Thema, das als Ziel für Nachrichten mit MQTT-Routing konfiguriert wurde, wurde gelöscht. Event Grid legt die MQTT-Nachricht ab, die weitergeleitet werden soll.
TooManyRequests Die Anzahl der mit MQTT weitergeleiteten Nachrichten pro Sekunde überschreitet den Veröffentlichungsgrenzwert für das benutzerdefinierte Thema. Event Grid versucht, die MQTT-Nachricht weiterzuleiten.
ServiceError Unerwarteter Serverfehler für den Betriebsgrund eines Servers. Event Grid versucht, die MQTT-Nachricht weiterzuleiten.

Event Grid verwendet exponentiell bei erneuten Versuchen ansteigende Wartezeiten für das MQTT-Nachrichtenrouting. Event Grid wiederholt die Zustellung nach folgendem Zeitplan auf Basis der besten Leistung:

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

Wenn eine weitergeleitete MQTT-Nachricht, die für erneute Zustellung in die Warteschlange eingereiht wurde, erfolgreich war, versucht Event Grid, die Nachricht nach dem Prinzip „beste Leistung“ aus der Wiederholungswarteschlange zu entfernen, aber Duplikate werden möglicherweise trotzdem empfangen.

Nächste Schritte:

In den folgenden Artikeln erfahren Sie mehr über Routing:

Schnellstart:

Konzepte: