本文介紹裝置與物聯網平台和物聯網平台與伺服器端的通訊相關問題和解決方案。
裝置重複收到訊息,如何去重?
由於QoS 1訊息的機制是保證最少收到一次訊息,所以可能會出現重複收到訊息的情況,但重複訊息的訊息ID是相同的。裝置端可以根據訊息ID去重;物聯網平台也會減少重複發送QoS 1訊息。
裝置使用MQTT協議接入物聯網平台後,接收不到通訊資料,怎麼辦?
裝置接收不到資料時,您可以根據實際情境,從以下幾個方面進行排查解決:
如果一直接收不到訊息:檢查裝置是否訂閱對應的通訊Topic,MQTT裝置接收訊息需要先訂閱對應的通訊Topic。
如果偶爾接收不到訊息:查看裝置端通訊程式的回調中是否存在耗時邏輯。如果存在,建議相關耗時業務另起線程處理,不要在回調中直接處理。
如果裝置端是Android、Java等SDK:裝置程式中需先執行通訊Topic的訂閱操作,再執行初始化操作,以免訊息下推時,SDK尚未完成訂閱,導致錯過訊息接收。
如果是QoS 1的訊息沒有接收到:檢查MQTT串連參數cleanSession是否為false。cleanSession需要設定為false才可以接收離線期間的QoS 1訊息。
物聯網平台是否會儲存訊息?
訊息通過Topic發送後,物聯網平台就會立即將訊息轉寄給訂閱了該Topic的裝置。
QoS 0訊息:物聯網平台不儲存。
QoS 1訊息:物聯網平台會儲存7天。
物聯網平台發送訊息比較慢,存在逾時情況,為什嗎?
可能是網路不穩定導致。
您可以執行以下操作,測試裝置串連通訊的網路可用性:
登入物聯網平台控制台。
在執行個體概覽頁面,找到對應的執行個體,單擊執行個體ID或備忘名稱。
在左側導覽列,選擇裝置管理 > 裝置。
在裝置頁面的裝置列表上方,輸入目標裝置的DeviceName或備忘名稱,搜尋裝置。
單擊裝置對應操作列的查看,查看裝置資訊。
在裝置資訊頁簽下,單擊即時延遲右側的測試。
單擊確認,測試網路延遲。
您可重複步驟6~步驟7,多測試幾次。如果通訊鏈路有高延遲,則說明是網路不穩定。
物聯網平台支援遺囑訊息和保留訊息嗎?
支援。物聯網平台支援使用MQTT 5.0通訊協定設定遺囑訊息和保留訊息。使用說明,請參見物聯網平台支援的MQTT 5.0特性。
伺服器端如何擷取裝置訊息?
伺服器端可通過以下兩種方式擷取裝置訊息。
已配置MNS服務端訂閱,但在控制台上發送訊息,MNS的隊列中並沒有收到該訊息,為什嗎?
在物聯網平台控制台發送的訊息和調用雲端API發送的訊息均屬於服務端發送的訊息,不會轉寄到MNS隊列,只有裝置發出的訊息(裝置上報訊息、裝置狀態變化通知、裝置標籤變更等)才會轉寄到MNS隊列裡。
如何判斷MNS服務端收到的訊息是來自哪個Topic?
發送到MNS隊列中的訊息格式:
{
"messageid": "12345",
"messagetype": "status/upload",
"topic": "null/topic",
"payload": {},
"timestamp": 1469564576
}
您可根據topic
欄位進行判斷。
如何從物聯網平台雲端下髮指令到裝置端?
您可調用物聯網平台API下發訊息,支援API如下:
API | 說明 |
通過自訂Topic向指定裝置發布訊息。 | |
通過自訂Topic,向指定產品下的多個裝置,批量發送訊息。 | |
向指定產品下線上裝置發布廣播訊息。 線上裝置可指定為所有線上裝置或訂閱了指定Topic的線上裝置。 | |
向指定裝置發送請求訊息,並同步返迴響應。 | |
設定指定裝置的物模型屬性值。 | |
設定指定產品下多個裝置的物模型屬性值。 | |
在單個裝置上調用指定的物模型服務。 | |
在指定產品下多個裝置上調用指定的物模型服務。 |