1、前言
内容:物联网平台消息流转,包括云产品流转和服务端订阅 官网地址
时长:建议学习时长整体50分钟,理论40分钟,实战10分钟
代码:设备端demo、服务端demo
约定:${productKey}、${deviceName}是占位符,意思是设备自己的 productKey 和 deviceName
导航:上一课 下一课待续
上节课程遗留了一些问题
• 设备通过物联网平台上报了消息,那么消息如何展示到我的网页上呢?
• 设备只能往自己的topic发送消息,那么设备A如何发送消息给设备B呢?
以上场景可以使用我们的规则引擎来解决。
2、规则引擎是什么、能干什么
规则引擎是物联网平台的一个重要功能组件,包含云产品流转和服务端订阅两个主要功能。云产品流转是物联网平台把收到的消息流转到阿里云的云产品,包括把消息流转回物联网平台(消息从一个Topic流转到另一个Topic)。服务端订阅是物联网平台把设备上报的消息直接推送到用户的业务服务器。如果说物联网平台是设备数据上云的重要门户,那么规则引擎就是数据进门后云游世界的摆渡车。
3、云产品流转
3.1、消息展示到网页
正常情况下用户有自己的业务系统,业务系统从数据库获取到数据然后展示到网页。这个过程是大家都熟悉的。那么设备上报的数据如何展示到已有的业务系统网页呢?可以通过规则引擎把设备上报的数据流转到阿里云数据库RDS,然后业务系统从数据库获取数据展示到网页。这个就是规则引擎云产品流转的能力。对业务系统而言,基本没有改变任何逻辑,就是换了个数据源。
本例将完成如下步骤,涉及的demo代码包通过课程【前言】提供的链接下载即可。开发环境的搭建不再赘述,是普通 maven 工程。
设备端代码:com.aliyun.alink.demo.devicesdk.chapter02.DeviceA
• 创建一个规则,名为:一个Hello规则
• 创建一个动作,流转到RDS
• 启动规则
• 使用设备端SDK让设备 device_0 上线并发送消息给物联网平台
• 规则引擎将消息流转到阿里云RDS存储
2.1.1、创建规则
2.1.2、创建动作
本例数据库表为 tbl_rule_to_rds,已经创建好,表结构如下
创建动作,官网文档:https://help.aliyun.com/document_detail/42736.html
2.1.3、启动规则
2.1.4、设备上报
还记得上一节课设备消息上报的demo么,类似的,启动:com.aliyun.alink.demo.devicesdk.chapter02.DeviceA,填写设备device_0的三元组信息后直接启动。设备端调用publish接口上报消息,本例发送的topic=/${productKey}/${deviceName}/user/update,消息内容为 {"content":"hello iot"}。
几个关键的对应关系:
• 设备上报的消息格式为json,创建规则时“数据格式”选择为JSON。
• 设备上报的topic=/${productKey}/${deviceName}/user/update,创建规则时 sql 配置的 topic=/${productKey}/+/user/update。
• 数据库表格字段为messgeContent,创建动作时“键”填写为messgeContent。
• 设备上报的消息内容为{"content":"hello iot"},创建动作时“键”对应的“值”填写为${content}。
2.1.5、结果展示
日志服务能够看到数据从设备到云,再通过规则引擎到rds。
traceId=0a3027ec15993912862926564d098c
数据库查询可以看到上面发送的消息,hello iot 已经插入到数据库表中。
3.2、设备A发送消息给设备B
设备只能订阅自己的topic,也只能给自己的topic发送消息。那么设备A的消息想要发送给设备B,该怎么办?可以通过规则引擎把设备A上报的数据流转到设备B。这个也是规则引擎云产品流转的能力,只是这个流转是物联网平台流转到物联网平台,消息从一个Topic流转到另一个Topic。
本例将完成如下步骤,涉及的demo代码包通过课程【前言】提供的链接下载即可。开发环境的搭建不再赘述,是普通 maven 工程。
设备端代码:com.aliyun.alink.demo.devicesdk.chapter02.DeviceA 和 com.aliyun.alink.demo.devicesdk.chapter02.DeviceB
• 创建一个设备,名为:device_1
• 在同样的规则下,再创建一个动作,流转到另一个Topic
• 使用设备端SDK让设备 device_1 上线
• 使用设备端SDK让设备 device_0 上线并发送消息给物联网平台
3.2.1、创建动作
沿用上面的规则,我们增加一个动作。规则不用重新启动。
3.2.2、设备B准备
启动:com.aliyun.alink.demo.devicesdk.chapter02.DeviceB,填写设备 device_1 的三元组信息后直接启动。
设备需要订阅/${productKey}/${deviceName}/user/get。
3.2.3、设备A上报
启动:com.aliyun.alink.demo.devicesdk.chapter02.DeviceA,填写设备 device_0 的三元组信息后直接启动。设备上报的topic是 /${productKey}/${deviceName}/user/update,设备上报的消息是 {"content":"hello iot"}。
几个关键的对应关系:
• 设备上报的消息格式为json,创建规则时“数据格式”选择为JSON。
• 设备上报的topic=/${productKey}/${deviceName}/user/update,创建规则时 sql 配置的 topic=/${productKey}/+/user/update。
• 流转到另一个topic=/${productKey}/${deviceName}/user/get,设备B需要提前订阅好这个topic。
3.2.4、结果展示
日志服务能够看到消息从设备device_0到物联网平台,再通过规则引擎republish,从物联网平台到了另一个设备device_1。
traceId=0a3032ac15993925119167862d3bc9
同时,device_1 是可以收到物联网平台转发的消息的。
3.3、云产品流转高阶能力
云产品流转还有许多高阶能力,这里就不一一讲述了。
• 函数,官网文档:https://help.aliyun.com/document_detail/30555.html
• 容灾,官网文档:https://help.aliyun.com/document_detail/42733.html
4、服务端订阅
服务端可以直接订阅产品下所有类型的消息:设备上报消息、设备状态变化通知、设备生命周期变更、物模型历史数据上报、固件升级状态通知。配置服务端订阅后,物联网平台会将产品下所有设备的已订阅类型的消息转发至您的服务器。
本例将完成如下步骤,涉及的demo代码包通过课程【前言】提供的链接下载即可。开发环境的搭建不再赘述,是普通 maven 工程。
设备端代码:com.aliyun.alink.demo.devicesdk.chapter02.DeviceA
服务端代码:com.aliyun.alink.demo.openapi.chapter02.AmqpJavaClientDemo
• 创建一个服务端订阅
• 启动服务端订阅客户端
• 使用设备端SDK让设备 device_0 上线并发送消息给物联网平台
• 服务端订阅客户端可以接收到消息
4.1、创建服务端订阅
官网文档:https://help.aliyun.com/document_detail/142376.html
4.2、启动服务端订阅客户端
启动:com.aliyun.alink.demo.openapi.chapter02.AmqpJavaClientDemo,填写必要信息。
4.3、设备上报消息
启动:com.aliyun.alink.demo.devicesdk.chapter02.DeviceA,填写设备 device_0 的三元组信息后直接启动。
设备上报的topic是 /${productKey}/${deviceName}/user/update
设备上报的消息是 {"content":"hello iot"}
4.4、结果展示
服务端订阅客户端可以接收到设备上线、设备上报、设备离线三条消息。
5、云产品流转 vs 服务端订阅
6、总结
上节课讲解了设备消息的上报(绿色线路),本节课讲解了用户业务系统如何获取到设备上报的消息(蓝色线路云产品流转、黄色线路服务端订阅),业务系统获取到设备消息后就可以进行数据的处理和展示。
7、后续
目前为止,对用户设备和业务系统来说,物联网平台就是一个消息的中转站,但事实上物联网平台远不止消息中转站的功能,下节课将讲解物联网平台的高阶能力 -- 设备管理。
8、思考题
规则引擎是否可以流转 Open API 下发的消息?服务端订阅呢?