全部产品
Search
文档中心

阿里云物联网平台:通信相关问题

更新时间:May 12, 2023

本文介绍设备与物联网平台和物联网平台与服务器端的通信相关问题和解决方法。

设备重复收到消息,如何去重?

由于QoS 1消息的机制是保证最少收到一次消息,所以可能会出现重复收到消息的情况,但重复消息的消息ID是相同的。设备端可以根据消息ID去重;物联网平台也会减少重复发送QoS 1消息。

设备使用MQTT协议接入物联网平台后,接收不到通信数据,怎么办?

设备接收不到数据时,您可以根据实际场景,从以下几个方面进行排查解决:

  • 如果一直接收不到消息:检查设备是否订阅对应的通信Topic,MQTT设备接收消息需要先订阅对应的通信Topic。

  • 如果偶尔接收不到消息:查看设备端通信程序的回调中是否存在耗时逻辑。如果存在,建议相关耗时业务另起线程处理,不要在回调中直接处理。

  • 如果设备端是Android、Java等SDK:设备程序中需先执行通信Topic的订阅操作,再执行初始化操作,以免消息下推时,SDK尚未完成订阅,导致错过消息接收。

  • 如果是QoS 1的消息没有接收到:检查MQTT连接参数cleanSession是否为falsecleanSession需要设置为false才可以接收离线期间的QoS 1消息。

物联网平台是否会保存消息?

消息通过Topic发送后,物联网平台就会立即将消息转发给订阅了该Topic的设备。

  • QoS 0消息:物联网平台不保存。

  • QoS 1消息:物联网平台会保存7天。

物联网平台发送消息比较慢,存在超时情况,为什么?

可能是网络不稳定导致。

您可以执行以下操作,测试设备连接通信的网络可用性:

  1. 登录物联网平台控制台

  2. 实例概览页面,找到对应的实例,单击实例ID或备注名称。

  3. 在左侧导航栏,选择设备管理 > 设备

  4. 设备页面的设备列表上方,输入目标设备的DeviceName备注名称,搜索设备。

  5. 单击设备对应操作列的查看,查看设备信息。

  6. 设备信息页签下,单击实时延迟右侧的测试

  7. 单击确认,测试网络延迟。

您可重复步骤6~步骤7,多测试几次。如果通信链路有高延迟,则说明是网络不稳定。

物联网平台支持遗嘱消息和保留消息吗?

支持。物联网平台支持使用MQTT 5.0通信协议设置遗嘱消息和保留消息。使用说明,请参见物联网平台支持的MQTT 5.0特性

服务器端如何获取设备消息?

服务器端可通过以下两种方式获取设备消息。

  • 服务端订阅:使用物联网平台的服务端订阅功能,订阅一个或多个消息类型。物联网平台根据您设置的订阅,将产品下所有设备的该类型消息流转至您的服务器。支持以下两种方式的服务端订阅:

  • 云产品流转:使用消息转发的云产品流转功能,通过数据流转规则将指定设备数据流转到消息服务(MNS)的主题或消息队列(RocketMQ)的队列中。服务器通过MNS或RocketMQ SDK接收消息。详细内容,请参见云产品流转概述

已配置MNS服务端订阅,但在控制台上发送消息,MNS的队列中并没有收到该消息,为什么?

在物联网平台控制台发送的消息和调用云端API发送的消息均属于服务端发送的消息,不会转发到MNS队列,只有设备发出的消息(设备上报消息、设备状态变化通知、设备标签变更等)才会转发到MNS队列里。

如何判断MNS服务端收到的消息是来自哪个Topic?

发送到MNS队列中的消息格式:

{
	"messageid": "12345",
	"messagetype": "status/upload",
	"topic": "null/topic",
	"payload": {},
	"timestamp": 1469564576
}

您可根据topic字段进行判断。

如何从物联网平台云端下发指令到设备端?

您可调用物联网平台API下发消息,支持API如下:

API

说明

Pub

通过自定义Topic向指定设备发布消息。

BatchPub

通过自定义Topic,向指定产品下的多个设备,批量发送消息。

PubBroadcast

向指定产品下在线设备发布广播消息。

在线设备可指定为所有在线设备或订阅了指定Topic的在线设备。

RRpc

向指定设备发送请求消息,并同步返回响应。

SetDeviceProperty

设置指定设备的物模型属性值。

SetDevicesProperty

设置指定产品下多个设备的物模型属性值。

InvokeThingService

在单个设备上调用指定的物模型服务。

InvokeThingsService

在指定产品下多个设备上调用指定的物模型服务。