終端設備一直處于斷線狀態?
檢查終端客戶端端使用是否進行了重連機制。
連接異常斷開?
(1)不同的客戶端使用相同的Client ID;
(2) 報文是否超過最大限制;
(3)權限不匹配。
斷線重連收不到消息?
(1)對于cleanSession=true的客戶端,斷線重連后需要重新主題訂閱;
(2)對于cleanSession=false的客戶端,斷線在2h時間范圍內重新成功無需進行主題訂購,超過也需主題重新訂閱。
離線消息缺失?
對于clean session=false的客戶端在未超出會話失效期斷線重連后可接收Qos>0的離線消息,離線消息限制不超過10條。
Broker連接數為0?
MQTT Broker節點宕機重連,客戶端重連至其他節點,正常現象。
產品訂購時可選資源池節點不一致?
已上線資源池節點的剩余容量達到一定比例后,為確保老客戶權益,將不再面向新客戶開放,產品訂購時的可選資源節點范圍以實際為準。
為什么控制臺顯示的訂閱關系數比實際使用的高很多?
當cleanSession設置為false時,客戶端離線后訂閱關系也會一直保留,不會被清理。通過設置cleanSession為false,可以確保在客戶端離線時保留訂閱關系,這對于一些需要持久化訂閱關系的應用場景非常有用,例如設備斷開連接后重新連接時仍然需要保持之前的訂閱狀態。
需要注意的是,當cleanSession設置為false時,MQTT Broker需要維護客戶端的會話狀態,這可能會增加服務器的負擔。因此,在設計和配置MQTT應用時,需要權衡清理會話和保留會話的需求,并根據實際情況進行設置。
設備偶爾出現“connection reset by peer”錯誤。
當兩個客戶端具有相同的客戶端ID(Client ID)時,MQTT Broker會根據規范的要求進行互踢(Kick-off),即斷開其中一個客戶端的連接。這是因為MQTT協議要求每個客戶端ID必須是唯一的,用于標識不同的客戶端。
當發生客戶端ID重復的情況時,MQTT Broker會選擇保持最新連接的客戶端,而斷開舊連接的客戶端。這是為了確保每個客戶端ID都對應唯一的客戶端連接,并避免潛在的沖突和數據混亂。
當舊連接的客戶端被斷開后,它可能仍然嘗試發送數據到已經斷開的TCP連接。這會導致對端Socket發送RST(Reset)報文,通知客戶端連接已經被重置或關閉。這是正常的網絡行為,用于清除已經斷開的連接的殘留數據。
資源報表的最大查詢范圍是多少?
分布式消息服務MQTT支持查詢7天以內的指標數據。
為什么設備都斷電了,控制臺還顯示設備在線?
分布式消息服務MQTT會定時檢查客戶端心跳,當系統檢測到客戶端超過指定時長(1.5*keepalive時長)沒有心跳,則會斷開連接。
如何在控制臺修改訂閱關系?
訂閱關系在訂閱消息的SDK代碼中設置,控制臺只能查詢。
本地測試先發送消息,再訂閱接收不到消息,設置離線消息后還是接收不到。
若先啟動生產者發送消息,如果Topic從未有過訂閱,則即使設置了離線消息(QoS=1且cleanSession=false),消費者啟動后也不會收到離線消息;如果Topic被消費者訂閱過,消費者離線后,若設置了離線消息,這些離線消息會在消費者再次上線后被消費到。