Publikowanie komunikatów MQTT protokołu HTTP za pomocą usługi Azure Event Grid

Interfejs API HTTP Publish brokera MQTT w usłudze Azure Event Grid umożliwia klientom publikowanie komunikatów MQTT (Message Queuing Telemetry Transport) za pomocą standardowych żądań HTTP. Ta funkcja uzupełnia bezpośrednie połączenia klienta MQTT. Zapewnia prostą i skalowalną opcję dla systemów po stronie serwera, które preferują protokół HTTP dla poleceń i kontroli serwer-urządzenie, aktualizacji lub zachowywanego zarządzania komunikatami.

Najważniejsze korzyści:

  • Umożliwia usługom zaplecza wysyłanie komunikatów MQTT bez konieczności otwierania trwałych sesji MQTT.
  • Pomaga chronić stabilność brokera przez ograniczenie sesji MQTT na klienta.
  • Zapewnia spójne przetwarzanie komunikatów pochodzących z MQTT i HTTP.

Kiedy należy używać funkcji publikowania HTTP

Rozważ użycie funkcji publikowania HTTP, gdy:

  • Usługi zaplecza są natywne dla protokołu HTTP i muszą wysyłać polecenia lub aktualizacje urządzenia za pośrednictwem protokołu MQTT.
  • Chcesz zarządzać zachowanymi komunikatami bez otwierania połączenia MQTT.
  • Należy zwiększyć wydajność publikowania bez wyczerpywania limitów sesji.

Jak to działa

  1. Klienci HTTP wystawiają żądanie HTTP POST ze szczegółami publikowania MQTT.
  2. Usługa Event Grid mapuje części żądania HTTP na standardowe właściwości pakietu MQTT PUBLISH.
  3. Komunikaty przepływają przez potok routingu i wzbogacania usługi Event Grid, który zapewnia gwarancje dostarczenia oraz stosuje wszelkie wzbogacenia lub przekształcenia.

Przykład: odpowiednik publikowania MQTT

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

Przykład: żądanie publikowania HTTP

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

Parametry żądania

W poniższej tabeli opisano, w jaki sposób części żądania HTTP są mapowane na właściwości pakietu MQTT PUBLISH. Aby uzyskać szczegółowe informacje, zapoznaj się z oryginalną dokumentacją.

Część publikowania MQTT Typ/wartości Lokalizacja Wymagane Description
Nazwa tematu Ciąg zakodowany procentowo Zapytanie topic Tak Temat MQTT do publikowania
QoS 0 lub 1 Zapytanie qos lub nagłówek mqtt-qos Nie [default = 1] Poziom jakości usług (QoS)
RETAIN flaga 0 lub 1 Zapytanie retain lub nagłówek mqtt-retain Nie [default = 0] Czy zachować komunikat
Temat odpowiedzi Ciąg zakodowany procentowo Nagłówek mqtt-response-topic Nie. Temat odpowiedzi w razie potrzeby
Dane korelacji Ciąg base64 Nagłówek mqtt-correlation-data Nie. Dodatkowe dane do śledzenia
Właściwości użytkownika Tablica JSON w formacie Base64 Nagłówek mqtt-user-properties Nie. Niestandardowe właściwości użytkownika
Typ zawartości Sznurek Nagłówek content-type Nie. Typ ładunku
Interwał wygaśnięcia komunikatu Liczba całkowita bez znaku Nagłówek mqtt-message-expiry-interval Nie. Okres przechowywania w sekundach
Wskaźnik formatu ładunku 0 lub 1 Nagłówek mqtt-payload-format-indicator Nie [default = 0] Wskaźnik formatu
Ładunek Bajty Treść protokołu HTTP Nie. Treść wiadomości

Notes:

  • Wartości parametrów zapytania zastępują wartości nagłówków, jeśli oba te wartości są obecne.
  • Kodowanie procentowe jest wymagane dla tematu i tematu odpowiedzi.
  • Dane korelacji muszą być zakodowane w formacie Base64.

Główne kroki korzystania z publikowania HTTP

  1. Przygotuj token okaziciela Microsoft Entra ID do uwierzytelniania.
  2. Skonstruuj żądanie HTTP POST do punktu końcowego brokera MQTT usługi Event Grid.
  3. Uwzględnij wymagane parametry zapytania, takie jak temat.
  4. Dodaj opcjonalne nagłówki dla QoS, flagi RETAIN, tematu odpowiedzi i właściwości użytkownika.
  5. Dodaj swoje dane jako treść żądania HTTP.
  6. Wyślij żądanie.
  7. Potwierdź dostarczenie na podstawie dzienników i metryk w portalu Event Grid.

Uwierzytelnianie i autoryzacja

  • Publikacja HTTP używa Microsoft Entra ID do uwierzytelniania.
  • Token elementu nośnego jest wymagany w nagłówku autoryzacji.
  • Identyfikator obiektu Entra firmy Microsoft staje się identyfikatorem klienta MQTT.
  • Model AuthN/AuthZ jest zgodny ze standardowymi połączeniami MQTT.

Trasowanie i obserwowalność

Metryki i dzienniki obejmują:

  • Protokół: http-publish
  • Identyfikator żądania
  • Temat
  • Źródłowy adres IP
  • Podmiot autoryzacji

Najlepsze rozwiązania

  • W miarę możliwości używaj kluczy nagłówków zapisanych małymi literami. Klucze nagłówków HTTP/2 są niewrażliwe na wielkość liter.
  • Monitoruj przepływność, ponieważ komunikaty HTTP są zwykle większe niż bezpośrednie komunikaty MQTT.
  • Zwróć uwagę, że HTTP Publish współdzieli limity przepustowości z wiadomościami MQTT publikowanymi bezpośrednio.

Ograniczanie prędkości

Operacja HTTP Publish jest wliczana do ogólnego limitu przepustowości MQTT. Monitoruj użycie, aby uniknąć przekroczenia limitów.