从阿里云IOT云平台获取设备数据
前言:
这篇文档主要讲述的就是当设备的数据发送到物联网套件之后,用户的服务端如何获取设备
的数据。
通过阅读阿里云IoT文档,我们了解到队列中消息结构体如下:
{
"payload": "Base64 Encode的数据",
"messagetype": "status",
"messageid": 996000000000000001,
"topic": "具体的设备Topic",
"timestamp": 1526450324
}
- messageid:IoT套件生成的消息ID
- messagetype:指的是消息类型:设备状态status和设备上报消息upload
- topic:表示该消息源自套件中的哪个topic,当messageType=status时,topic为null,当messageType=upload时,topic为具体的设备Topic
- payload:数据为Base64 Encode的数据。当messageType=status时,数据是设备状态数据;当messageType=upload时,data即为设备发布到Topic中的原始数据。
- timestamp:队列中消息生成时间戳,并非业务的时间戳
一,基于HTTP/2通道的服务端订阅-设备状态和数据
1.服务端订阅
1.1 服务端订阅流程
在IoT场景,有时候我们期望业务服务器能接收到设备状态和设备采集的数据,而不是通过云产品中转。这时我们可以开启服务端订阅,IoT平台会把设备产生的消息通过HTTP/2通道推送到业务服务器,以便根据自身业务场景消费。
服务端可以直接订阅产品下配置的所有类型的消息。
目前,新版物联网平台通过HTTP/2通道进行消息流转。配置HTTP/2服务端订阅后,物联网平台会将消息通过HTTP/2通道推送至服务端。通过接入HTTP/2 SDK,企业服务器可以直接从物联网平台接收消息。HTTP/2 SDK提供身份认证、Topic订阅、消息发送和消息接收能力,并支持设备接入和云端接入能力。HTTP/2 SDK适用于物联网平台与企业服务器之间的大量消息流转,也支持设备与物联网平台之间的消息收发。
注:HTTP/2是方便、快捷、低延时,小堆积的消息流转通道,不是队列。目前是只有java8客户端sdk。 如果业务数据流非常大, 需要支持海量消息堆积,建议通过规则引擎流转队列方式处理。
不论那个方式,消费端还是需要提升自身消费速率才能高效处理业务消息。
目前服务端订阅是基于uid的,所有产品的消息都会被HTTP/2的client端消费,这时需要我们自己根据topic包含的productKey/deviceName区分