服务端开发

阿里云主账号或对应RAM用户的AccessKey ID和AccessKey Secret。

登录物联网平台控制台,将鼠标移至账号头像上,然后单击AccessKey管理,获取AccessKey ID和AccessKey Secret。

对服务端进行业务开发,实现接收设备数据和下发控制指令。本文以Java脚本为例,演示接收设备数据和下发控制指令。

准备开发环境

本文使用Java开发环境如下:

业务服务器接收设备数据

服务器通过AMQP客户端接收消息,需配置AMQP客户端接入物联网平台,监听设备消息,请参见AMQP客户端接入说明Java SDK接入示例

示例使用Java开发语言,推荐使用Apache Qpid JMS客户端。您可访问Qpid JMS 0.57.0,查看Qpid JMS客户端使用说明。

参照以下步骤,完成AMQP客户端开发。

  1. 下载Demo代码包,并解压。

  2. 打开IntelliJ IDEA,导入Demo包中的示例工程amqp-demo

    在pom.xml文件中,已添加Maven依赖,下载Qpid JMS客户端。

  3. 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}";
    
    // 指定单个进程启动的连接数
    // 单个连接消费速率有限,请参考使用限制,最大128个连接
    // 连接数和消费速率及rebalance相关,建议每500QPS增加一个连接
    private static int connectionCount = 4;

    参数

    示例

    说明

    accessKey

    LTAI4GFGQvKuqHJhFa******

    阿里云主账号或对应RAM用户的AccessKey ID和AccessKey Secret。

    登录物联网平台控制台,将鼠标移至账号头像上,然后单击AccessKey管理,获取AccessKey ID和AccessKey Secret。

    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客户端的连接数,最大不超过128个。用于实时消息推送的扩容。

    消费组详情页面会以${clientId}+"-"+数字形式,显示连接的客户端。其中数字最小值为0。

    host

    iot-***.amqp.iothub.aliyuncs.com

    AMQP接入域名,请参见查看和配置实例终端节点信息(Endpoint)

业务服务器下发控制指令

服务器通过调用Pub接口下发控制指令:CMD,82923,ad322

参照以下步骤,完成服务端开发,其中参数配置,请参见Java SDK使用说明Pub

  1. 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>
  2. 在工程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());
            }
    
        }
    }
  3. 配置相关参数,替换以下参数为实际值。

    参数

    说明

    ${accessKey}

    您账号的AccessKey IDAccessKey Secret

    您可在阿里云官网控制台AccessKey管理中创建或查看您的AccessKey。

    ${accessSecret}

    ${RegionId}

    您的物联网平台服务的地域代码。

    您可在物联网平台控制台左上方,查看当前服务所在地域。

    地域代码的表达方法,请参见地域列表

    ${iotInstanceId}

    您设备所属实例的ID。您可在物联网平台控制台的实例概览页面,查看当前实例的ID。

    • 若有ID值,必须传入该ID值。

    • 若无ID值,传入空值即可。

    ${productKey}

    您添加设备后,保存的设备证书信息。

    您可在物联网平台控制台的设备详情页面查看。

    ${deviceName}

后续步骤

整体联调运行