阅读193 返回首页    go 小米 go 小米MIX


服务端快速接入__快速开始_阿里云物联网套件-阿里云

本文主要介绍了服务端如何使用IoT套件快速实现订阅设备消息的功能。在IoT套件中主要有以下两个使用场景:

  1. 您的服务器需要订阅设备消息
  2. 您的服务器需要订阅设备状态变化通知

这两个场景实现方式都一样,消息会推送到某个topic,通过Iot套件规则引擎可以配置一个规则,把消息流转到消息服务(MNS),然后您的服务器就可以使用MNS的sdk来接收消息了。功能参考 MNS

这种方式优势是MNS可以保证消息的可靠性,避免了服务端不可用时的消息丢失,同时MNS在处理大量消息并发时有削峰填谷的作用,保证服务端不会因为突然的并发压力导致服务不可用。

服务端订阅步骤

  1. mns控制台创建主题
  2. iot的控制台配置规则引擎,增加消息到mns的规则
  3. 您的服务器接入mns的sdk(推荐使用queue模式订阅)
  4. 发送一条设备消息,查看您的服务器是否收到

详细参考以下截图:

MNS控制台操作

MNS控制台

1.创建主题

这个主题是为了给规则引擎推送数据使用的。

创建主题

2.创建订阅

主题创建后,还需要给这个主题创建订阅者,这样您的服务器以某个订阅者身份去订阅数据。

mns订阅入口

主题的消息可以被多个订阅者消费,目前几种方式:

  1. 队列:把topic里消息转到某个队列,这样您的服务器可以基于某个队列监听数据
  2. http:把topic里消息主动通知到您的http地址(需要您部署http webserver)
  3. 邮件:参考mns文档 邮件推送
  4. 短信:参考mns文档短信推送

下面以队列方式举例:

  • 队列推送方式(推荐使用):

队列推送方式

注意,订阅名称是您的某个队列,如果没有,需要到队列里面创建一个。

创建队列

创建队列

规则引擎创建规则

iot控制台操作 iot控制台

1.创建规则

创建规则

2.编写SQL

编写SQL

上图中的Topic是接收消息的IoT套件的Topic。

3.添加方法

添加方法

上图中的主题是之前步骤中在MNS的控制台上创建的主题。

4.启动规则

启动规则

设备状态通知到指定Topic(可选)

设备状态数据发送到某个topic,这样您的设备一旦上线便可利用规则引擎把上线下线等状态信息发到topic。注意topic名称和上面规则引擎sql内的topic匹配。

配置设备状态Topic,如何使用请参考红框中的文字描述和上述图片示例。配置设备状态Topic

配置规则引擎的规则时请参考设备状态通知数据格式。

服务端接收消息代码示例:

以MNS的JAVA版SDK使用为例,在工程的pom.xml文件里添加如下依赖:

  1. <dependency>
  2. <groupId>com.aliyun.mns</groupId>
  3. <artifactId>aliyun-sdk-mns</artifactId>
  4. <version>1.1.5</version>
  5. </dependency>

接收mns消息的代码:

  1. CloudAccount account = new CloudAccount(
  2. $AccessKeyId,
  3. $AccessKeySecret,
  4. $AccountEndpoint;

AccessKeyId和AccessKeySecret是和阿里云账号绑定的,在下图所示位置获取:获取账号信息

AccountEndpoint可以在MNS的控制台上获取,如下图所示:获取endpoint

  1. MNSClient client = account.getMNSClient();
  2. CloudQueue queue = client.getQueueRef("queue-test"); //queue-test是之前创建的MNS队列名
  3. while (true) {
  4. // 获取消息
  5. Message popMsg = queue.popMessage(10); //长轮询等待时间为10秒
  6. if (popMsg != null) {
  7. System.out.println("PopMessage Body: "
  8. + popMsg.getMessageBodyAsRawString()); //获取原始消息
  9. queue.deleteMessage(popMsg.getReceiptHandle()); //从队列中删除消息
  10. } else {
  11. System.out.println("Continuing");
  12. }
  13. }

服务端发布消息测试:

以IoT套件的JAVA版SDK为例,介绍服务端如何调用API发布消息(如果您的设备已经开发好,也可以使用设备端来发送消息):

添加Maven依赖

Maven坐标:

  1. <dependency>
  2. <groupId>com.aliyun</groupId>
  3. <artifactId>aliyun-java-sdk-iot</artifactId>
  4. <version>2.0.3</version>
  5. </dependency>

依赖公共包:

  1. <dependency>
  2. <groupId>com.aliyun</groupId>
  3. <artifactId>aliyun-java-sdk-core</artifactId>
  4. <version>2.4.2</version>
  5. </dependency>

发布测试消息

  1. String accessKeyID = "<your AccessKeyID>";
  2. String accessKeySecret = "<your AccessKeySecret>";
  3. IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyID, accessKeySecret);
  4. DefaultAcsClient client = new DefaultAcsClient(profile); //初始化SDK客户端
  5. PubRequest pub = new PubRequest();
  6. pub.setProductKey(1234); //ProductKey
  7. pub.setMessageContent(Base64.encode("{a:1,b:2}")); // base64 String 的消息,消息是json才会触发规则引擎
  8. pub.setTopicFullName("/1234/xxx"); //消息发送到哪个topic中,需要和规则引擎sql中topic匹配才能触发规则
  9. pub.setQos(1); //设置Qos为1,设备如果不在线,重新上线会收到离线消息,消息最多在IotHub中保存7天
  10. PubResponse response = client.getAcsResponse(pub);
  11. System.out.println(response.getRequestId()); //当次请求的ID
  12. System.out.println(response.getSuccess()); //请求是否成功
  13. System.out.println(response.getErrorMessage()); //出错时的错误信息

最后更新:2016-12-15 17:42:51

  上一篇:go 设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
  下一篇:go SDK下载__设备端接入手册_阿里云物联网套件-阿里云