Freigeben über


HTTP-Veröffentlichung von MQTT-Nachrichten mit Azure Event Grid

Mit der HTTP-Broker-API für die HTTP-Veröffentlichung von Azure Event Grid können Kunden MQTT-Nachrichten (Message Queuing Telemetry Transport) mithilfe standardmäßiger HTTP-Anforderungen veröffentlichen. Diese Funktion ergänzt direkte MQTT-Clientverbindungen. Sie bietet eine einfache und skalierbare Option für serverseitige Systeme, die HTTP für Server-zu-Gerät-Befehle und -Steuerung, Updates oder die Verwaltung von beibehaltenen Nachrichten bevorzugen.

Hauptvorteile:

  • Ermöglicht Back-End-Diensten das Senden von MQTT-Nachrichten, ohne permanente MQTT-Sitzungen offen zu halten.
  • Trägt zum Schutz der Brokerstabilität bei, indem MQTT-Sitzungen pro Client eingeschränkt werden.
  • Stellt eine konsistente Verarbeitung für Nachrichten sicher, die von MQTT und HTTP stammen.

Verwendung der HTTP-Veröffentlichung

Erwägen Sie die Verwendung der HTTP-Veröffentlichung in folgenden Fällen:

  • Ihre Back-End-Dienste sind HTTP-nativ und müssen Gerätebefehle oder Updates über MQTT senden.
  • Sie möchten beibehaltene Nachrichten verwalten, ohne eine MQTT-Verbindung zu öffnen.
  • Sie müssen die Veröffentlichungskapazität skalieren, ohne Sitzungsgrenzwerte zu überschreiten.

Funktionsweise

  1. HTTP-Clients stellen eine HTTP-POST-Anforderung mit MQTT-Veröffentlichungsdetails aus.
  2. Event Grid ordnet HTTP-Anforderungsteile den standardmäßigen MQTT-PUBLISH-Paketeigenschaften zu.
  3. Nachrichten fließen durch die Event Grid-Routing- und Anreicherungspipeline, wodurch Übermittlungsgarantien gewährleistet und alle Anreicherungen oder Transformationen angewendet werden.

Beispiel: Äquivalent zur MQTT-Veröffentlichung

PUBLISH Topic Name: devices/CXa-23112/prompt  
QoS: 1  
RETAIN: 0  
Response Topic: devices/CXa-23112/reply  
Correlation Data: >U±¶¶»/  
User Property: Urgency = alert  
User Property: RequestId = 55f4a7ee-b0b4-4d7f-8eb5-2edba2ced5d7  
Payload: Please accept terms of licensing and agreement

Beispiel: HTTP-Veröffentlichungsanforderung

POST /mqtt/messages?topic=devices%2FCXa-23112%2Fprompt&api-version=2025-02-15-preview HTTP/1.1  
Host: nsname.westus3-1.ts.eventgrid.azure.net  
Authorization: Bearer <ENTRA_TOKEN_HERE>  
mqtt-qos: 1  
mqtt-retain: 0  
mqtt-response-topic: devices%2FCXa-23112%2Freply  
mqtt-correlation-data: PlXCscK2wrbCuy8=  
mqtt-user-properties: W3siVXJnZW5jeSI6ImFsZXJ0In0seyJSZXF1ZXN0SWQiOiI1NWY0YTdlZS1iMGI0LTRkN2YtOGViNS0yZWRiYTJjZWQ1ZDcifV0=  
Content-Type: text/plain;charset=UTF-8  
Date: Sun, 06 Nov 1994 08:49:37 GMT  
Content-Length: 46  

Please accept terms of licensing and agreement

Anforderungsparameter

In der folgenden Tabelle wird beschrieben, wie HTTP-Anforderungsteile den Eigenschaften von MQTT-PUBLISH-Paketen zugeordnet werden. Ausführliche Informationen finden Sie in der Originaldokumentation.

Teil der MQTT-Veröffentlichung Typ/Werte Standort Erforderlich Description
Themenname Prozentcodierte Zeichenfolge Abfrage topic Ja MQTT-Thema für die Veröffentlichung
QoS 0 oder 1 Abfrage qos oder Kopfzeile mqtt-qos Nein [Standard = 1] QoS-Ebene
RETAIN-Flag 0 oder 1 Abfrage retain oder Kopfzeile mqtt-retain Nein [Standard = 0] Ob die Nachricht beibehalten werden soll
Antwortthema Prozentcodierte Zeichenfolge Header mqtt-response-topic Nein Antwortthema bei Bedarf
Korrelationsdaten Base64-Zeichenfolge Header mqtt-correlation-data Nein Zusätzliche Daten für die Nachverfolgung
Benutzereigenschaften Base64-JSON-Array Kopfzeile mqtt-user-properties Nein Benutzerdefinierte Benutzereigenschaften
Inhaltstyp Schnur Header content-type Nein Nutzlasttyp
Ablaufintervall der Nachricht Ganze Zahl ohne Vorzeichen Kopfzeile mqtt-message-expiry Nein Aufbewahrungszeitraum in Sekunden
Nutzlastformatindikator 0 oder 1 Kopfzeile mqtt-payload-format-indicator Nein [Standard = 0] Formatindikator
Nutzlast Byte-Einheiten HTTP-Textkörper Nein Nachrichtentext

Notes:

  • Abfrageparameterwerte überschreiben Headerwerte, wenn beide vorhanden sind.
  • Die Prozentcodierung ist für Themen- und Antwortthemen erforderlich.
  • Korrelationsdaten müssen Base64-codiert sein.

Allgemeine Schritte zur Verwendung der HTTP-Veröffentlichung

  1. Bereiten Sie Ihr Microsoft Entra ID-Bearertoken für die Authentifizierung vor.
  2. Erstellen Sie Ihre HTTP-POST-Anforderung an Ihren Event Grid-MQTT-Brokerendpunkt.
  3. Schließen Sie erforderliche Abfrageparameter wie das Thema ein.
  4. Fügen Sie optionale Header für QoS, das RETAIN-Flag, das Antwortthema und die Benutzereigenschaften hinzu.
  5. Fügen Sie Ihre Nutzlast als HTTP-Text hinzu.
  6. Senden Sie die Anforderung.
  7. Bestätigen Sie die Übermittlung über Protokolle und Metriken im Event Grid-Portal.

Authentifizierung und Autorisierung

  • Die HTTP-Veröffentlichung verwendet Microsoft Entra ID für die Authentifizierung.
  • Im Autorisierungsheader ist ein Bearertoken erforderlich.
  • Die Microsoft Entra-Objekt-ID wird zur MQTT-Client-ID.
  • Das AuthN/AuthZ-Modell ist an MQTT-Standardverbindungen ausgerichtet.

Routing und Observability

Metriken und Protokolle umfassen:

  • Protokoll: http-publish
  • Anfrage-ID
  • Thema
  • Quell-IP
  • Autorisierungsprinzipal

Bewährte Methoden

  • Verwenden Sie nach Möglichkeit Kleinbuchstaben für Headerschlüssel. Bei HTTP/2-Headerschlüsseln wird die Groß-/Kleinschreibung nicht beachtet.
  • Überwachen Sie den Durchsatz, da HTTP-Nachrichten tendenziell größer als direkte MQTT-Nachrichten sind.
  • Beachten Sie, dass die HTTP-Veröffentlichung Durchsatzgrenzwerte mit Nachrichten mit direkter MQTT-Veröffentlichung teilt.

Drosselung

Die HTTP-Veröffentlichung wird auf Ihr gesamtes MQTT-Durchsatzkontingent angerechnet. Überwachen Sie Ihre Nutzung, um Überschreitungen von Grenzwerten zu vermeiden.