本文介绍使用Node.js语言的AMQP SDK接入阿里云物联网平台,接收服务端订阅消息的示例。

开发环境

本示例所使用的开发环境为Node.js 8.0.0及以上版本。

下载SDK

Node.js版本AMQP SDK,推荐使用rhea。请访问rhea下载库和查看使用说明。

添加依赖

package.json中添加以下依赖。

"dependencies": {
    "rhea": "^1.0.12"
 }

代码示例

以下Demo中涉及的参数说明,请参见AMQP客户端接入说明

const container = require('rhea');
const crypto = require('crypto');

//创建Connection。
var connection = container.connect({
    //接入域名,请参见AMQP客户端接入说明文档。
    'host': '${YourHost}',
    'port': 5671,
    'transport':'tls',
    'reconnect':true,
    'idle_time_out':60000,
    //userName组装方法,请参见AMQP客户端接入说明文档。其中的iotInstanceId,企业版实例请填写实例ID,公共实例直接删除${YourIotInstanceId}。
    'username':'${YourClientId}|authMode=aksign,signMethod=hmacsha1,timestamp=1573489088171,authId=${YourAccessKeyId},iotInstanceId=${YourIotInstanceId},consumerGroupId=${YourConsumerGroupId}|', 
    //计算签名,password组装方法,请参见AMQP客户端接入说明文档。
    'password': hmacSha1('${YourAccessKeySecret}', 'authId=${YourAccessKeyId}&timestamp=1573489088171'),
});

//创建Receiver Link。
var receiver = connection.open_receiver();

//接收云端推送消息的回调函数。
container.on('message', function (context) {
    var msg = context.message;
    var messageId = msg.message_id;
    var topic = msg.application_properties.topic;
    var content = Buffer.from(msg.body.content).toString();

    // 输出内容。
    console.log(content);

    //发送ACK,注意不要在回调函数有耗时逻辑。
    context.delivery.accept();
});

//计算password签名。
function hmacSha1(key, context) {
    return Buffer.from(crypto.createHmac('sha1', key).update(context).digest())
        .toString('base64');
}

您需按照如下表格中的参数说明,修改代码中的参数值。更多参数说明,请参见AMQP客户端接入说明

参数 示例 说明
host 233***.iot-amqp.cn-shanghai.aliyuncs.com AMQP客户端接入物联网平台的接入域名。详细说明,请参见查看实例终端节点
username 'test |authMode=aksign,signMethod=hmacsha1,timestamp=1573489088171,authId=LTAI4GFGQvKuqHJhFajiW5j3,iotInstanceId=iot-060a02ne,consumerGroupId=DEFAULT_GROUP|' 接入物联网平台的身份认证信息。其中:
  • ${YourClientId}:替换为客户端ID,可自定义,长度不可超过64个字符。建议使用您的AMQP客户端所在服务器UUID、MAC地址、IP等唯一标识。

    登录物联网平台控制台,在对应实例的规则引擎 > 服务端订阅 > 消费组列表,单击消费组对应的查看消费组详情页将显示该参数,方便您识别区分不同的客户端。

  • ${YourAccessKeyId}${YourAccessKeySecret}:替换为您物联网平台的AccessKey ID和AccessKey Secret。

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

    说明 如果使用RAM用户,您需授予该用户管理物联网平台的权限(AliyunIOTFullAccess),否则将连接失败。授权方法请参见授权RAM用户访问物联网平台
  • ${YourIotInstanceId}:替换为实例ID。企业版实例请填写实例ID,公共实例直接删除${YourIotInstanceId}。

    您可登录物联网平台控制台,找到对应的实例,单击实例,进入实例详情页面查看企业版实例ID。

  • ${YourConsumerGroupId}:替换为消费组ID。

    登录物联网平台控制台,在对应实例的规则引擎 > 服务端订阅 > 消费组列表查看您的消费组ID。

password hmacSha1('iMS8ZhCDd***', 'authId=LTAI4GFGQ***&timestamp=1573489088171')

运行结果示例

  • 成功:返回类似如下日志信息,表示AMQP客户端已接入物联网平台并成功接收消息。成功
  • 失败:返回类似如下日志信息,表示AMQP客户端连接物联网平台失败。

    您可根据日志提示,检查代码或网络环境,然后修正问题,重新运行代码。

    失败