服务端订阅设备消息

设备连接物联网平台后,数据直接上报至物联网平台,平台上的数据可以通过AMQP通道流转至您的服务器。本文为您介绍通过配置AMQP服务端订阅,实现企业服务器通过接入AMQP客户端,接收路灯设备数据的完整流程。

前提条件

已接入设备和上报数据。具体操作,请参见设备接入和上报数据

准备开发环境

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

示例使用的开发环境如下:

配置AMQP服务端订阅

  1. 物联网平台控制台实例概览页签,单击实例IoT测试环境

  2. 为消息消费端配置消费组身份,用于企业服务器通过消费组获取转发的消息。

    1. 在左侧导航栏选择消息转发 > 服务端订阅,单击消费组列表页签。

    2. 单击创建消费组

    3. 创建消费组对话框中,设置消费组名称为温控器数据接收,单击确认

      创建消费组成功后,跳转到消费组详情页面,查看消费组ID。您需复制并保存消费组ID值,用于AMQP客户端接入。消费组ID

  3. 为家庭温控器产品配置服务端订阅,用于您的服务器直接订阅产品下多种类型的消息。

    1. 在左侧导航栏选择消息转发 > 服务端订阅

    2. 服务端订阅页面的订阅列表页签下,单击创建订阅

    3. 创建订阅对话框,设置参数后单击确认

      参数

      说明

      产品

      选择家庭温控器

      订阅类型

      选择AMQP

      消费组

      选择上一步创建的温控器数据接收

      推送消息类型

      选择设备上报消息物模型历史数据上报。更多消息类型,请参见配置AMQP服务端订阅

    您也可以通过云产品流转功能,将数据转发至AMQP订阅的消费组,使用AMQP客户端接收消息。例如,将流转规则温控器数据流转中已处理的物模型数据上报内容,转发到AMQP订阅的消费组温控器数据接收中。具体操作,请参见数据转发到AMQP服务端订阅消费组消费

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 static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        private static String accessSecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        private static String consumerGroupId = "1yRO*****************";
    
        //iotInstanceId:实例ID。若是2021年07月30日之前(不含当日)开通的公共实例,请填空字符串。
        private static String iotInstanceId = "iot-cn-******";
    
        //控制台服务端订阅中消费组状态页客户端ID一栏将显示clientId参数。
        //建议使用机器UUID、MAC地址、IP等唯一标识等作为clientId。便于您区分识别不同的客户端。
        private static String clientId = "test_IoT";
    
        //${YourHost}为接入域名,请参见AMQP客户端接入说明文档。
        private static String host = "iot-cn-******.amqp.iothub.aliyuncs.com";
    
        // 指定单个进程启动的连接数
        // 单个连接消费速率有限,请参考使用限制,最大64个连接
        // 连接数和消费速率及rebalance相关,建议每500QPS增加一个连接
        private static int connectionCount = 4;

    参数

    说明

    accessKey

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

    重要

    为避免将AccessKey硬编码到业务代码中带来的安全风险,本示例采用配置环境变量的方法管理AccessKey。

    您需在本地操作系统中添加环境变量ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET,并分别写入已准备好的AccessKey ID和AccessKey Secret。

    accessSecret

    consumerGroupId

    已创建的温控器数据接收消费组ID。请参见上文配置AMQP服务端订阅的步骤2。

    iotInstanceId

    IoT测试环境的实例ID。您可在控制台的实例概览页签查看。

    clientId

    表示客户端ID,需您自定义,长度不可超过64个字符。建议使用您的AMQP客户端所在服务器UUID、MAC地址、IP等唯一标识。

    AMQP客户端接入并启动成功后,登录物联网平台控制台,在对应实例的消息转发 > 服务端订阅 > 消费组列表页签,单击消费组对应的查看消费组详情页面将显示该参数,方便您识别区分不同的客户端。

    host

    您购买实例成功后,保存的AMQP接入域名,请参见创建企业版实例

    您可在控制台中实例IoT测试环境实例详情页面,单击查看开发配置,单击AMQP页签查看。

    connectionCount

    启动AMQP客户端的连接数,最大不超过128个。用于实时消息推送的扩容。

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

  4. 运行AmqpClient.java示例代码后,返回类似如下日志信息,表示AMQP客户端已接入物联网平台并成功接收消息。

    说明

    本示例Demo代码中,添加了结束程序的代码(Thread.sleep(60 * 1000);),即程序启动成功,运行一分钟后会结束。实际场景中,您可根据需要自行设置运行时间。

    运行结果

    返回参数:

    参数

    参数值

    说明

    topic

    /***********/******/thing/event/property/post

    设备属性上报的Topic。

    messageId

    1324198300680719360

    消息的ID。

    content

    {"temperature":23,"humidity":21,"time":1604548451951}

    消息的内容。

    代码运行成功后,您可在服务端订阅中,查看消费组状态的基本信息。

    具体操作,请参见管理AMQP消费组

    消费组状态

查看日志

所有配置完成后,登录物联网平台控制台,在企业实例下的监控运维 > 日志服务中,从产品列表选择家庭温控器,可在云端运行日志页签下,查看完整的日志信息。

日志信息

后续步骤

服务端下发指令