本文為您介紹MQTT 5.0的新特性共用訂閱。
背景資訊
MQTT協議基於發布訂閱者模式設計,一條訊息發布後,所有的訂閱者都可以收到。但在有些情境下,使用者只希望一個或者幾個訂閱者可以收到特定訊息,共用訂閱就適用於這種情境,共用訂閱需要訂閱者訂閱時添加共用訂閱標記及訂閱組。
每個訂閱組內只有一個訂閱者可以收到訊息。
在上圖中,訂閱者C、訂閱者D、發行者A都遵循標準流程,訂閱topic:demo/topic
和發布訊息topic:demo/topic
。因為訂閱者A、訂閱者B使用了共用訂閱的能力,所以只會隨機發給A或者B其中一個。
共用訂閱topic:$share/group/demo/topic
包含:
共用訂閱標記:
$share
訂閱組:
group1
,由使用者指定。原始topic:
demo/topic
,由使用者自訂。
物聯網平台通過訂閱標記$share
和訂閱組group1識別目標訂閱為共用訂閱且所屬的訂閱組為group1
。共用訂閱也支援通配,例如訂閱所有訊息,可以訂閱topic:$share/group1/#
。
使用限制
目前只有尊享型執行個體的雲網關和標準MQTT型執行個體支援共用訂閱。
如果在單個共用訂閱分組中存在多個共用訂閱者,則物聯網平台隨機播放一位訂閱者推送訊息。
目前只有MQTT 5.0協議接入的裝置支援共用訂閱,使用MQTT 3.1協議接入的裝置即使符合共用訂閱規則,也不支援共用訂閱。
使用情境
服務端負載平衡
當大量裝置接入物聯網平台並向物聯網平台發送訊息時,需要有多個商務服務端來處理這些訊息,物聯網平台的共用訂閱特性可以協助客戶將訊息分發到多個商務服務端,實現負載平衡。在下圖中,商務服務端A、B使用相同的訂閱組,物聯網平台會把裝置相關訊息隨機推送給A或者B。
阿里雲物聯網平台服務訂閱已經整合共用訂閱的能力,可以通過AMQP將訊息發送給商務服務端。更多資訊,請參見什麼是服務端訂閱。
服務端任務調度
基於共用訂閱能力,用一條訊息表示一個任務,可以隨機將每個任務派送給單個物聯網裝置,實現簡單的任務調度。例如下圖中物聯網裝置為機器人,商務服務端下達一個搬運任務,只需要一台裝置響應,共用訂閱功能會將搬運任務只推送給其中一個機器人。