本文為您介紹MQTT共用訂閱特性。
功能介紹
MQTT 3.3.1、5.0引入了共用訂閱(Shared Subscription)特性,這是一種通過在多個用戶端間分發訊息的方式,使得負載平衡成為可能。在標準的MQTT協議中,每個訂閱相同主題的用戶端都會收到該主題的每條訊息副本。共用訂閱改變了這一行為,讓訊息能夠在一組用戶端間進行分發,每條訊息只會發送給訂閱該共用主題的任一個用戶端。
使用限制
目前僅專業版和鉑金版支援該功能,且需要提交工單申請。
目前共用訂閱僅支援qos1語義,即至少一次投遞。在用戶端消費慢、用戶端斷線重連、服務端升級、服務端宕機等情境下會產生訊息重複推送。
消費者組數量不超過5000。
應用情境
負載平衡:在大規模分布式系統中,共用訂閱可以實現用戶端間的負載平衡,特別是在訊息量巨大時。
系統冗餘和可靠性:可以通過運行多個用戶端執行個體來提高系統的冗餘性和可靠性,如果一個用戶端失敗,其他的用戶端可以替補。
高可用性的服務:共用訂閱可以提供高顯示狀態服務,通過多個處理節點確保服務的穩定性和持久性。
訊息樣本
假設一個訊息系統,後端有多個工作節點負責處理推送到orders/new主題的新訂單訊息。通過利用共用訂閱,訂單能夠被均勻分配給所有線上的工作節點處理。
以下是工作節點用戶端的訂閱情況:
SUBSCRIBE
Topic Filter: $share/group1/orders/new這裡,$share/group1/是共用訂閱的標識,group1是此共用訂閱的組名,orders/new為用戶端實際訂閱的共用主題。
當有新的訂單訊息發布到orders/new時,只有其中一個訂閱了共用訂閱主題的用戶端會接收並處理這個訂單:
PUBLISH
Topic: orders/new
Payload: { "order_id": "xyz", "product": "ABC" }MQTT Broker會按照某種演算法(比如輪詢,隨機,雜湊等)在group1組中的用戶端間平均分發訊息,以實現負載平衡。
共用訂閱使得MQTT更適用於處理大流量,要求高可用性和可靠性的企業級應用。通過共用訂閱,能夠有效地將訊息負載分散到多個訂閱者上,而不是由單個訂閱者承擔所有工作,能夠提高系統的擴充性和健壯性。