共用方式為


使用 Azure 事件方格透過 HTTP 發佈 MQTT 訊息 (預覽)

Azure 事件方格 MQTT 代理程式 HTTP 發佈 API 可讓客戶使用標準 HTTP 要求來發佈訊息佇列遙測傳輸 (MQTT) 訊息。 此功能補充了直接 MQTT 用戶端連線。 它為那些偏好使用 HTTP 進行伺服器到裝置命令和控制、更新或保留訊息管理的伺服器端系統提供了一個簡單且可調整的選項。

備註

此功能目前為預覽狀態。

主要優點:

  • 容許後端服務傳送 MQTT 訊息,而無需保持續性的 MQTT 工作階段開啟。
  • 透過限制每個用戶端的 MQTT 工作階段數,來協助保護代理程式的穩定性。
  • 確保對源自 MQTT 和 HTTP 的訊息進行一致的處理。

何時使用 HTTP 發佈

在以下情況下考慮使用 HTTP 發佈:

  • 您的後端服務是原生 HTTP 服務,且需要透過 MQTT 傳送裝置命令或更新。
  • 您希望在不開啟 MQTT 連線的情況下管理保留的訊息。
  • 您需要在不超出工作階段限制的情況下擴大發佈容量。

運作方式

  1. HTTP 用戶端會發出包含 MQTT 發佈詳細資料的 HTTP POST 要求。
  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 主題
QoS 0 或 1 查詢 qos 或標頭 mqtt-qos 否 [預設值 = 1] 服務品質 (QoS) 層級
RETAIN 旗標 0 或 1 查詢 retain 或標頭 mqtt-retain 否 [預設值 = 0] 是否保留訊息
回應主題 百分比編碼的字串 標頭 mqtt-response-topic 回應主題 (若需要的話)
相互關聯資料 Base64 字串 標頭 mqtt-correlation-data 用於追蹤的額外資料
使用者屬性 Base64 JSON 陣列 標頭 mqtt-user-properties 自訂使用者屬性
內容類型 繩子 標頭 content-type 承載類型
訊息到期間隔 不帶正負號的整數 標頭 mqtt-message-expiry 保留期間 (以秒為單位)
承載格式指示器 0 或 1 標頭 mqtt-payload-format-indicator 否 [預設值 = 0] 格式指示器
承載 Bytes HTTP 主體 訊息內文

Notes:

  • 查詢參數值會覆寫標頭值 (若兩項都存在的話)。
  • 主題和回應主題必須使用百分比編碼。
  • 相互關聯資料必須以 Base64 格式編碼。

使用 HTTP 發佈的高階步驟

  1. 準備您的 Microsoft Entra ID 持有人權杖來進行驗證。
  2. 建構傳送到事件方格 MQTT 代理程式端點的 HTTP POST 要求。
  3. 包含必要的查詢參數,例如 topic。
  4. 新增 QoS、RETAIN 旗標、回應主題和使用者屬性的選用標頭。
  5. 將您的承載新增為 HTTP 主體。
  6. 傳送要求。
  7. 透過事件方格入口網站中的記錄和計量確認傳遞狀態。

身份驗證與授權

  • HTTP 發佈會使用 Microsoft Entra ID 來進行驗證。
  • 授權標頭中需要持有人權杖。
  • Microsoft Entra 物件識別碼會變成 MQTT 用戶端識別碼。
  • AuthN/AuthZ 模型與標準 MQTT 連線一致。

路由傳送和可檢視性

計量和記錄包括:

  • 通訊協定:http-publish
  • 請求編號
  • 主題
  • 來源 IP
  • 授權主體

最佳做法

  • 盡可能使用小寫的標頭索引鍵。 HTTP/2 標頭索引鍵不區分大小寫。
  • 監視傳輸量,因為 HTTP 訊息通常比直接的 MQTT 訊息大。
  • 請注意,HTTP 發佈會與直接的 MQTT 發佈訊息共用輸送量限制。

節流

HTTP 發佈會計入您的整體 MQTT 輸送量配額。 監視您的使用量以避免超過限制量。