全部產品
Search
文件中心

ApsaraMQ for MQTT:遺囑訊息

更新時間:Nov 14, 2025

本文為您介紹MQTT特性遺囑訊息。

功能介紹

在MQTT協議中,遺囑訊息(Will Message)是一種由用戶端在串連時指定的,當用戶端異常中斷連線時由代理代為發布的訊息。用戶端在串連時會提供遺囑訊息的內容、主題、QoS 層級等資訊,代理會在用戶端串連時儲存這條資訊,如果用戶端非正常斷開(比如斷電、網路故障等),代理會自動將遺囑訊息發布到指定的主題。

MQTT 5.0協議對遺囑訊息的功能進行了一些增強:

  • 遺囑延遲間隔(Will Delay Interval):遺囑訊息現在可以包含一個延遲間隔的屬性,即在會話到期前需要等待一段指定時間後才發布遺囑訊息。這給了用戶端在遺囑訊息被發送前重新串連的機會,避免了不必要的遺囑訊息發布。

  • 內容類型(Content Type):遺囑訊息現在可以包含描述其有效荷載(Payload)內容的內容類型屬性,使得訊息的接受者能更好地理解訊息的意圖和如何處理。

  • 遺囑訊息屬性:遺囑訊息可以帶有自訂屬性,例如訊息到期間隔、遺囑延遲間隔、請求響應等,增加了遺囑訊息的彈性和可描述性。

  • 響應主題(Response topic)和關聯資料(Correlation Data):遺囑訊息也可以設定響應主題和關聯資料。通過響應主題,可以說明遺囑訊息接收者要發布響應的目標主題。而關聯資料則用於在原始請求和響應之間保持狀態或關聯上下文。

  • 負載格式說明(Payload Format Indicator):可以聲明遺囑訊息的負載格式是已知的結構化資料(如JSON或XML)還是不透明的位元組流,允許接收者更好地理解和處理訊息。

  • 使用者屬性(User Properties):遺囑訊息也可以攜帶使用者屬性,用於應用特定或業務相關的自訂訊息。

MQTT的遺囑訊息在5.0版本中變得更加靈活和強大,讓用戶端和服務提供者能夠為遺囑訊息定製更多的資訊和行為,從而可以滿足多樣化的應用情境需求。

使用限制

目前僅專業版和鉑金版支援該功能,且需要提交工單申請。

使用情境

  • 裝置監控:在IoT應用中,如果裝置的串連由於網路問題或裝置故障而意外斷開,遺囑訊息可以通知監控系統或其他裝置,以便採取相應的措施,比如啟動警示或嘗試重新串連。

  • 被訂閱者通知:在即時通訊應用中,當使用者的串連意外斷開時,可以使用遺囑訊息通知其他使用者該使用者離線。

  • 系統故障恢複:在分布式系統中,某個組件異常退出可能需要通知其他部分進行故障移交或重新路由請求。

  • 最後狀態更新:在Home Automation系統中,智慧型裝置可以在中斷連線時發布遺囑訊息以更新其最後已知狀態。

MQTT 5.0 的遺囑訊息提供了一種可靠的機制來處理用戶端異常中斷連線的情況,可以增強物聯網應用的健壯性和可靠性。

訊息樣本

例如,有一個智能澆灌系統的感應器通過MQTT串連到控制伺服器。在串連時,感應器設定了遺囑訊息,以便於如果感應器由於某種原因失去串連,比如斷電或網路問題,遺囑訊息能夠被發布。

// 感應器串連到MQTT代理,設定遺囑訊息
CONNECT
ClientId: sensor1
Will Topic: home/garden/sensor1/status
Will Message: disconnected
Will Delay Interval: 10 // 代理會在10秒後發布遺囑訊息
Session Expiry Interval: 60 // 會話到期時間設定為60秒
// 其他的CONNECT報文資訊

如果感應器在沒有發送DISCONNECT報文(正常斷線)的情況下失去了串連,那麼MQTT代理將在指定的延遲間隔之後發布以下遺囑訊息到遺囑主題:

Topic: home/garden/sensor1/status
Payload: disconnected

這條遺囑訊息被其他已經訂閱了該遺囑主題(例如控制伺服器)的用戶端接收,用於通知它們感應器已經中斷連線。這樣,控制伺服器可以採取相應的措施,如嘗試重建立立串連、發送警報,或轉移到備份感應器。