某個Topic配置了訂閱關係清理功能後,當訂閱者的用戶端離線並超過指定時間後,雲Message QueueTT 版會刪除訂閱者與該Topic的訂閱關係。若不清理訂閱關係,訂閱者用戶端離線期間訂閱關係將持續生效,當用戶端再次上線時,雲Message QueueTT 版將自動載入離線訊息並下發到用戶端。若您對離線訊息有時效性要求或業務側判斷訂閱者失效不需再使用時,可以通過此功能清理訂閱的Topic關係。
使用說明
操作步驟
若開啟訂閱關係清理功能,用戶端將收不到離線訊息,請謹慎操作。
登入雲Message QueueTT 版控制台,並在左側導覽列單擊实例列表。
在頂部功能表列選擇目標地區,然後在執行個體列表中單擊執行個體名稱進入实例详情頁面。
在左側導覽列單擊Topic 管理,然後在Topic列表中找到目標Topic,在其操作列,選擇。
在彈出的自動清理周期配置面板,設定开启自动订阅关系清理和清理周期,單擊确定。
开启自动订阅关系清理設定為是:當系統目前時間−用戶端最後一次心跳時間≥清理周期時,系統將清理訂閱者與該Topic的訂閱關係。訂閱關係清理後,用戶端將收不到該Topic產生的離線訊息。
重要當用戶端再次上線時,依然可以接收到訂閱關係清理前產生的、且在有效期間內的離線訊息。
开启自动订阅关系清理設定為否:訂閱者用戶端離線期間,系統不會清理訂閱者與該Topic的訂閱關係,訂閱關係持續生效。
配置完成後,您可以在Topic列表的订阅关系清理周期列查看Topic的清理周期。
用戶端主動取消訂閱
MQTT 協議在用戶端線上狀態下不支援自動清理舊訂閱關係。切換 Topic 時,需調用 SDK 的 unsubscribe 方法取消舊訂閱,再訂閱新 Topic。
控制台的订阅关系清理功能僅針對離線情境:用戶端離線超過指定時間後觸發刪除,不適用於線上切換。
Java SDK 樣本:
MqttClient mqttClient = new MqttClient("tcp://" + endPoint + ":1883", clientId, new MemoryPersistence());
mqttClient.connect(options);
// 訂閱topicA
mqttClient.subscribe("topicA", 1);
// 切換到topicB前,先取消topicA訂閱
mqttClient.unsubscribe("topicA");
// 再訂閱topicB
mqttClient.subscribe("topicB", 1);
先調用 unsubscribe 取消舊 Topic 訂閱,再調用 subscribe 訂閱新 Topic,避免兩個訂閱同時生效。