到目前为止,如果要把数据从服务端发送到设备端,只能使用指令下发的方式,这种方式相当于是"Push"的模式,服务端主动推数据到设备端。这一课,我们来实现服务端到设备数据传输的另一种方式——"Pull"模式:设备数据请求。
设备数据请求
想较于之前的 Push 模式,数据的传输是由服务端触发的,Pull 模式是指由设备端主动向服务端请求数据(这个服务端包括业务系统和 IotHub)。
我在这里举一个很有意义的例子,比如:业务系统通过 Push 的方式把一些本地数据同步到设备了,过了一段时间以后设备的存储坏掉了,经过维修,换了一块新的存储,但是原有的本地数据已经丢失,这时候设备可以用 Pull 方式再把本地数据从业务系统主动同步过来。
可以看到,数据同步这个功能需要提供 Push 和 Pull 这两种语义的操作才完整。
在 IotHub 里,一次设备主动数据请求的流程如下:
- 设备发送数据请求到特定的主题:get/:ProductName/:DeviceName/:Resource/:MessageID,其中 Resource 代表要请求的资源名称。
- IotHub 将请求的内容,包括 DeviceName 和 Resource 已经请求的 Payload 通过 RabbmitMQ 发送给业务系统。
- 业务系统调用指令下发接口,请求 IotHub 将相应的数据下发给设备。
- IotHub 将数据用指令的方式下发给设备,指令名称以及设