Поделиться через


Http Publish of MQTT messages with Azure Event Grid (предварительная версия)

API публикации HTTP-api службы "Сетка событий Azure" MQTT Broker позволяет клиентам публиковать сообщения телеметрии очереди сообщений (MQTT) с помощью стандартных HTTP-запросов. Эта возможность дополняет прямые клиентские подключения MQTT. Он предоставляет простой и масштабируемый вариант для серверных систем, которые предпочитают HTTP для команд и управления серверами и устройствами, обновления или управления сохраненными сообщениями.

Замечание

Эта функция сейчас доступна в предварительной версии.

Основные преимущества:

  • Позволяет внутренним службам отправлять сообщения MQTT без открытия постоянных сеансов MQTT.
  • Помогает защитить стабильность брокера путем ограничения сеансов MQTT для каждого клиента.
  • Обеспечивает согласованную обработку сообщений, поступающих из MQTT и HTTP.

Когда следует использовать публикацию HTTP

Рекомендуется использовать HTTP Publish, когда:

  • Внутренние службы являются собственными HTTP и должны отправлять команды устройства или обновления по MQTT.
  • Вы хотите управлять сохраненными сообщениями без открытия подключения MQTT.
  • Необходимо увеличить масштаб емкости публикации без исчерпания ограничений сеанса.

Принцип работы

  1. HTTP-клиенты выдают HTTP-запрос POST с подробными сведениями о публикации MQTT.
  2. Сетка событий сопоставляет части HTTP-запроса со стандартными свойствами пакета MQTT PUBLISH.
  3. Сообщения передаются через конвейер маршрутизации и обогащения сетки событий, который обеспечивает гарантии доставки и применяет любое обогащение или преобразование.

Пример: эквивалент публикации 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

Пример: 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

Параметры запроса

В следующей таблице описывается сопоставление частей HTTP-запроса с свойствами пакета MQTT PUBLISH. Полные сведения см. в исходной документации.

Часть публикации MQTT Тип и значения Местоположение Обязательно Description
Имя раздела Строка, закодированная в процентах Запрос topic Да Раздел MQTT для публикации в
Качество обслуживания 0 или 1 Запрос qos или заголовок mqtt-qos Нет [по умолчанию = 1] Уровень качества обслуживания (QoS)
RETAIN флаг 0 или 1 Запрос retain или заголовок mqtt-retain Нет [по умолчанию = 0] Сохранение сообщения
Раздел ответа Строка, закодированная в процентах Заголовок mqtt-response-topic нет Раздел ответа при необходимости
Данные корреляции Строка Base64 Заголовок mqtt-correlation-data нет Дополнительные данные для отслеживания
Свойства пользователя Массив JSON Base64 Заголовок mqtt-user-properties нет Пользовательские свойства пользователя
Тип контента Струна Заголовок content-type нет Тип полезных данных
Интервал истечения срока действия сообщения Целое число без знака Заголовок mqtt-message-expiry нет Период хранения в секундах
Индикатор формата полезных данных 0 или 1 Заголовок mqtt-payload-format-indicator Нет [по умолчанию = 0] Индикатор форматирования
Полезная нагрузка Bytes Текст HTTP нет Текст сообщения

Notes:

  • Значения параметров запроса переопределяют значения заголовков, если они присутствуют.
  • Для раздела и ответа требуется кодировка процента.
  • Данные корреляции должны быть закодированы в кодировке Base64.

Высокоуровневые шаги по использованию публикации HTTP

  1. Подготовьте маркер носителя идентификатора Microsoft Entra для проверки подлинности.
  2. Создайте HTTP-запрос POST к конечной точке брокера MQTT Сетки событий.
  3. Включите необходимые параметры запроса, например раздел.
  4. Добавьте необязательные заголовки для QoS, флага, RETAIN раздела ответа и свойств пользователя.
  5. Добавьте полезные данные в текст HTTP.
  6. Отправьте запрос.
  7. Подтвердите доставку с помощью журналов и метрик на портале сетки событий.

Проверка подлинности и авторизация

  • Http Publish использует идентификатор Microsoft Entra для проверки подлинности.
  • Маркер носителя необходим в заголовке авторизации.
  • Идентификатор объекта Microsoft Entra становится идентификатором клиента MQTT.
  • Модель AuthN/AuthZ соответствует стандартным подключениям MQTT.

Маршрутизация и наблюдаемость

Метрики и журналы включают:

  • Протокол: http-publish
  • Идентификатор запроса
  • Тема
  • Исходный IP-адрес
  • Субъект авторизации

Лучшие практики

  • Используйте ключи заголовка нижнего регистра, где это возможно. Ключи заголовка HTTP/2 не учитывает регистр.
  • Отслеживайте пропускную способность, так как HTTP-сообщения, как правило, больше, чем прямые сообщения MQTT.
  • Обратите внимание, что ограничения пропускной способности публикации HTTP разделяются прямыми опубликованными сообщениями MQTT.

Ограничение скорости

Http Publish учитывает общую квоту пропускной способности MQTT. Отслеживайте использование, чтобы избежать превышения ограничений.