193
小米
服务端快速接入__快速开始_阿里云物联网套件-阿里云
本文主要介绍了服务端如何使用IoT套件快速实现订阅设备消息的功能。在IoT套件中主要有以下两个使用场景:
- 您的服务器需要订阅设备消息
- 您的服务器需要订阅设备状态变化通知
这两个场景实现方式都一样,消息会推送到某个topic,通过Iot套件规则引擎可以配置一个规则,把消息流转到消息服务(MNS),然后您的服务器就可以使用MNS的sdk来接收消息了。功能参考 MNS
这种方式优势是MNS可以保证消息的可靠性,避免了服务端不可用时的消息丢失,同时MNS在处理大量消息并发时有削峰填谷的作用,保证服务端不会因为突然的并发压力导致服务不可用。
服务端订阅步骤
- mns控制台创建主题
- iot的控制台配置规则引擎,增加消息到mns的规则
- 您的服务器接入mns的sdk(推荐使用queue模式订阅)
- 发送一条设备消息,查看您的服务器是否收到
详细参考以下截图:
MNS控制台操作
1.创建主题
这个主题是为了给规则引擎推送数据使用的。
2.创建订阅
主题创建后,还需要给这个主题创建订阅者,这样您的服务器以某个订阅者身份去订阅数据。
主题的消息可以被多个订阅者消费,目前几种方式:
- 队列:把topic里消息转到某个队列,这样您的服务器可以基于某个队列监听数据
- http:把topic里消息主动通知到您的http地址(需要您部署http webserver)
- 邮件:参考mns文档 邮件推送
- 短信:参考mns文档短信推送
下面以队列方式举例:
- 队列推送方式(推荐使用):
注意,订阅名称是您的某个队列,如果没有,需要到队列里面创建一个。
创建队列
规则引擎创建规则
iot控制台操作 iot控制台
1.创建规则
2.编写SQL
上图中的Topic是接收消息的IoT套件的Topic。
3.添加方法
上图中的主题是之前步骤中在MNS的控制台上创建的主题。
4.启动规则
设备状态通知到指定Topic(可选)
设备状态数据发送到某个topic,这样您的设备一旦上线便可利用规则引擎把上线下线等状态信息发到topic。注意topic名称和上面规则引擎sql内的topic匹配。
配置设备状态Topic,如何使用请参考红框中的文字描述和上述图片示例。
配置规则引擎的规则时请参考设备状态通知数据格式。
服务端接收消息代码示例:
以MNS的JAVA版SDK使用为例,在工程的pom.xml文件里添加如下依赖:
<dependency>
<groupId>com.aliyun.mns</groupId>
<artifactId>aliyun-sdk-mns</artifactId>
<version>1.1.5</version>
</dependency>
接收mns消息的代码:
CloudAccount account = new CloudAccount(
$AccessKeyId,
$AccessKeySecret,
$AccountEndpoint;
AccessKeyId和AccessKeySecret是和阿里云账号绑定的,在下图所示位置获取:
AccountEndpoint可以在MNS的控制台上获取,如下图所示:
MNSClient client = account.getMNSClient();
CloudQueue queue = client.getQueueRef("queue-test"); //queue-test是之前创建的MNS队列名
while (true) {
// 获取消息
Message popMsg = queue.popMessage(10); //长轮询等待时间为10秒
if (popMsg != null) {
System.out.println("PopMessage Body: "
+ popMsg.getMessageBodyAsRawString()); //获取原始消息
queue.deleteMessage(popMsg.getReceiptHandle()); //从队列中删除消息
} else {
System.out.println("Continuing");
}
}
服务端发布消息测试:
以IoT套件的JAVA版SDK为例,介绍服务端如何调用API发布消息(如果您的设备已经开发好,也可以使用设备端来发送消息):
添加Maven依赖
Maven坐标:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-iot</artifactId>
<version>2.0.3</version>
</dependency>
依赖公共包:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>2.4.2</version>
</dependency>
发布测试消息
String accessKeyID = "<your AccessKeyID>";
String accessKeySecret = "<your AccessKeySecret>";
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyID, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile); //初始化SDK客户端
PubRequest pub = new PubRequest();
pub.setProductKey(1234); //ProductKey
pub.setMessageContent(Base64.encode("{a:1,b:2}")); // base64 String 的消息,消息是json才会触发规则引擎
pub.setTopicFullName("/1234/xxx"); //消息发送到哪个topic中,需要和规则引擎sql中topic匹配才能触发规则
pub.setQos(1); //设置Qos为1,设备如果不在线,重新上线会收到离线消息,消息最多在IotHub中保存7天
PubResponse response = client.getAcsResponse(pub);
System.out.println(response.getRequestId()); //当次请求的ID
System.out.println(response.getSuccess()); //请求是否成功
System.out.println(response.getErrorMessage()); //出错时的错误信息
最后更新:2016-12-15 17:42:51
上一篇:
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
下一篇:
SDK下载__设备端接入手册_阿里云物联网套件-阿里云
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云