对服务端进行业务开发,实现接收设备数据和下发控制指令。本文以Java脚本为例,演示接收设备数据和下发控制指令。
准备开发环境
本文使用Java开发环境如下:
- 操作系统:Windows 10 64位
- JDK版本:JDK8
- 集成开发环境:IntelliJ IDEA社区版
业务服务器接收设备数据
服务器通过AMQP客户端接收消息,需配置AMQP客户端接入物联网平台,监听设备消息,请参见AMQP客户端接入说明、Java SDK接入示例。
示例使用Java开发语言,推荐使用Apache Qpid JMS客户端。您可访问Qpid JMS 0.57.0,查看Qpid JMS客户端使用说明。
参照以下步骤,完成AMQP客户端开发。
- 下载Demo代码包,并解压。
- 打开IntelliJ IDEA,导入Demo包中的示例工程amqp-demo。在pom.xml文件中,已添加Maven依赖,下载Qpid JMS客户端。
- 在src/main/java/com.aliyun.iotx.demo目录下AmqpClient.java文件中,参照下表,修改JMS客户端接入物联网平台代码中的参数值。
private final static Logger logger = LoggerFactory.getLogger(AmqpClient.class); private static String accessKey = "${YourAccessKey}"; private static String accessSecret = "${YourAccessSecret}"; private static String consumerGroupId = "${YourConsumerGroupId}"; //iotInstanceId:实例ID。 private static String iotInstanceId = "${YourIotInstanceId}"; //控制台服务端订阅中消费组状态页客户端ID一栏会显示clientId参数。 //建议使用机器UUID、MAC地址、IP等唯一标识作为clientId。便于您区分识别不同的客户端。 private static String clientId = "${YourClientId}"; //${YourHost}为接入域名,请参见AMQP客户端接入说明文档。 private static String host = "${YourHost}"; // 指定单个进程启动的连接数 // 单个连接消费速率有限,请参考使用限制,最大64个连接 // 连接数和消费速率及rebalance相关,建议每500QPS增加一个连接 private static int connectionCount = 4;
参数 示例 说明 accessKey LTAI4GFGQvKuqHJhFa****** 登录物联网平台控制台,将鼠标移至账号头像上,然后单击AccessKey管理,获取AccessKey ID和AccessKey Secret。
说明 如果使用RAM用户,您需授予该RAM用户管理物联网平台的权限(AliyunIOTFullAccess),否则将连接失败。授权方法请参见授权RAM用户访问物联网平台。accessSecret iMS8ZhCDdfJbCMeA005sieKe****** consumerGroupId VWhGZ2QnP7kxWpeSSjt****** 已创建的充电宝业务数据处理消费组ID,请参见云端配置开发的步骤6。 iotInstanceId "iot-cn-6ja***" 设备所属实例的ID。 您可在控制台的实例概览页面查看。
- 若有ID值,必须传入该ID值。
- 若无ID值,传入空值,即
iotInstanceId = ""
。
clientId 12345 客户端ID,可自定义,长度不可超过64个字符。建议设置为您的AMQP客户端所在服务器UUID、MAC地址、IP等唯一标识,方便您识别区分不同的客户端。 AMQP客户端接入成功后,在控制台的充电宝业务数据处理的消费组详情页面,显示该参数。
connectionCount 4 启动AMQP客户端的连接数,最大不超过64个。用于实时消息推送的扩容。 消费组详情页面会以
${clientId}+"-"+数字
形式,显示连接的客户端。其中数字最小值为0。host iot-***.amqp.iothub.aliyuncs.com AMQP接入域名,请参见查看实例终端节点。
业务服务器下发控制指令
服务器通过调用Pub接口下发控制指令:CMD,82923,ad322
。
参照以下步骤,完成服务端开发,其中参数配置,请参见Java SDK使用说明、Pub。
- 在amqp-demo工程中的pom.xml文件中,添加Maven依赖,然后单击Load Maven Changes图标,完成依赖包下载。
<!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-iot --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-iot</artifactId> <version>7.41.0</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.5.6</version> </dependency>
- 在工程amqp-demo的路径src/main/java/com.aliyun.iotx.demo下,创建Java类,输入代码。例如PubClient.java,代码内容如下。
import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.profile.DefaultProfile; import com.google.gson.Gson; import java.util.*; import com.aliyuncs.iot.model.v20180120.*; public class PubClient { public static void main(String[] args) { DefaultProfile profile = DefaultProfile.getProfile("${RegionId}", "${accessKey}", "${accessSecret}"); IAcsClient client = new DefaultAcsClient(profile); PubRequest request = new PubRequest(); request.setIotInstanceId("${iotInstanceId}"); request.setProductKey("${productKey}"); request.setQos(0); request.setTopicFullName("/${productKey}/${deviceName}/user/cmd/down"); request.setMessageContent(Base64.getEncoder().encodeToString("CMD,82923,ad322".getBytes())); try { PubResponse response = client.getAcsResponse(request); System.out.println(new Gson().toJson(response)); } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { System.out.println("ErrCode:" + e.getErrCode()); System.out.println("ErrMsg:" + e.getErrMsg()); System.out.println("RequestId:" + e.getRequestId()); } } }
- 配置相关参数,替换以下参数为实际值。
参数 说明 ${accessKey} 您账号的AccessKey ID和AccessKey Secret。 您可在阿里云官网控制台AccessKey管理中创建或查看您的AccessKey。
${accessSecret} ${RegionId} 您的物联网平台服务的地域代码。 您可在物联网平台控制台左上方,查看当前服务所在地域。
地域代码的表达方法,请参见地域列表。
${iotInstanceId} 您设备所属实例的ID。您可在物联网平台控制台的实例概览页面,查看当前实例的ID。 - 若有ID值,必须传入该ID值。
- 若无实例概览页面或ID值,传入空值即可。
${productKey} 您添加设备后,保存的设备证书信息。 您可在物联网平台控制台的设备详情页面查看。
${deviceName}