Este tema muestra cómo usar el SDK AMQP para Node.js para conectarse a Alibaba Cloud IoT Platform y recibir mensajes mediante una suscripción del lado del servidor.
Requisitos previos
Debe haber obtenido un ID de grupo de consumidores y haberse suscrito a los mensajes de topic necesarios.
Manage AMQP consumer groups: Use el grupo de consumidores predeterminado (DEFAULT_GROUP) en IoT Platform o cree uno nuevo.
Configure an AMQP server-side subscription: Suscríbase a los mensajes de topic necesarios mediante un grupo de consumidores.
Configuración del entorno de desarrollo
Se requiere Node.js 8.0.0 o posterior.
Descarga e instalación del SDK
Para el SDK AMQP de Node.js, se recomienda usar la biblioteca rhea. Visite rhea para descargar la biblioteca y consultar su documentación.
Este ejemplo usa el comando npm install rhea para instalar la biblioteca rhea.
Procedimiento
En un sistema Windows o Linux, descargue e instale Node.js. Este tema toma como ejemplo un sistema Windows 10 (64 bits) y el paquete de instalación node-v14.15.1-x64.msi.
-
Una vez completada la instalación, abra una interfaz de línea de comandos y ejecute el siguiente comando para verificar la versión de Node.js.
node --versionSi la instalación es correcta, se muestra el número de versión:
v14.15.1 -
Cree un archivo JavaScript, por ejemplo amqp.js, para almacenar el código de ejemplo.
Modifique los parámetros como se describe en la siguiente tabla.
ImportanteEspecifique valores de parámetro válidos. De lo contrario, el cliente AMQP no podrá conectarse a IoT Platform.
const container = require('rhea'); const crypto = require('crypto'); // Exposing your AccessKey pair can compromise your account security. // This code retrieves the AccessKey pair from environment variables for demonstration only. var accessKey = process.env['ALIBABA_CLOUD_ACCESS_KEY_ID']; var accessSecret = process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET']; // Create a connection. var connection = container.connect({ // The endpoint. For more information, see the documentation on how to connect an AMQP client. 'host': '${YourHost}', 'port': 5671, 'transport':'tls', 'reconnect':true, 'idle_time_out':60000, // The username format. For more information, see the documentation on how to connect an AMQP client. 'username':'${YourClientId}|authMode=aksign,signMethod=hmacsha1,timestamp=1573489088171,authId=' + accessKey + ',iotInstanceId=${YourIotInstanceId},consumerGroupId=${YourConsumerGroupId}|', // Calculate the signature. For more information about the password format, see the documentation on how to connect an AMQP client. 'password': hmacSha1(accessSecret, 'authId='+ accessKey +'×tamp=1573489088171'), }); // Create a receiver link. var receiver = connection.open_receiver(); // The callback function for receiving messages pushed from the cloud. 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(); // Output the content. console.log(content); // Send an ACK. Do not include time-consuming operations in the callback function. context.delivery.accept(); }); // Calculate the password signature. function hmacSha1(key, context) { return Buffer.from(crypto.createHmac('sha1', key).update(context).digest()) .toString('base64'); }Parámetro
Ejemplo
Descripción
host
iot-cn-***.amqp.iothub.aliyuncs.com
El endpoint AMQP.
Para obtener el endpoint AMQP (
${YourHost}), consulte View and configure instance endpoints.username
'test |authMode=aksign,signMethod=hmacsha1,timestamp=1573489088171,authId=LTAI,iotInstanceId=,consumerGroupId=DEFAULT_GROUP|'
Las credenciales de autenticación para conectarse a IoT Platform. Esta cadena contiene los siguientes parámetros:
-
${YourClientId}: Reemplace este valor con su ID de cliente. Defina un ID personalizado de hasta 64 caracteres. Se recomienda usar un identificador único, como el UUID, la dirección MAC o la dirección IP del servidor donde se ejecuta el cliente AMQP.Una vez conectado el cliente AMQP, consulte este parámetro en la consola de IoT Platform. En la consola de su instancia, vaya a . En la pestaña, haga clic en View junto a su grupo de consumidores. La página Consumer Group Details muestra el ID de cliente para ayudarle a distinguir entre clientes.
-
${YourAccessKeyId}y${YourAccessKeySecret}: Reemplace estos valores con su AccessKey ID y AccessKey Secret.Para obtenerlos, inicie sesión en la consola de IoT Platform, pase el puntero sobre su foto de perfil en la esquina superior derecha y haga clic en AccessKey Management.
NotaSi usa un usuario RAM, debe adjuntar la política AliyunIOTFullAccess a dicho usuario. De lo contrario, la conexión fallará. Para más información, consulte RAM user access.
-
${YourIotInstanceId}: Reemplace este valor con su ID de instancia.Inicie sesión en la consola de IoT Platform. Encuentre el ID de la instancia en la pestaña Overview de su instancia.
ImportanteSi la pestaña Overview no está disponible o su instancia no tiene ID, elimine el parámetro
iotInstanceId=${YourIotInstanceId}de la cadena de nombre de usuario. -
${YourConsumerGroupId}: Reemplace este valor con su ID de grupo de consumidores.Para encontrar su ID de grupo de consumidores, inicie sesión en la consola de IoT Platform. En la consola de su instancia, vaya a .
password
hmacSha1('yourAccessKeySecret','authId=LTAI×tamp=1573489088171')
-
-
Abra una interfaz de línea de comandos, vaya al directorio que contiene el archivo amqp.js y ejecute el siguiente comando para instalar la biblioteca rhea:
npm install rheaAl finalizar el comando, el directorio raíz del proyecto contendrá una carpeta
node_modules, el archivoamqp.jsy un archivopackage-lock.json. -
En la ventana de CMD, introduzca el siguiente comando para ejecutar el código amqp.js e iniciar el servidor del cliente AMQP.
node amqp.js
Resultados del ejemplo
-
Éxito: Si la conexión es correcta, el cliente comienza a recibir mensajes y registra una salida similar a la siguiente. Este ejemplo muestra datos de temperatura y humedad reportados por un dispositivo.
xxx>node iot_amqp.js {"deviceType":"CustomCategory","iotId":"xxx","requestId":"1613748030337","checkFailedData":{},"productKey":"xxx","gmtCreate":1613747903528, "deviceName":"xxx","items":{"Temperature":{"value":xxx,"time":1613747903526},"Humidity":{"value":23,"time":1613747903526}}} {"deviceType":"CustomCategory","iotId":"xxx","requestId":"1613729851729","checkFailedData":{},"productKey":"xxx","gmtCreate":1613729721715, "deviceName":"xxx","items":{"Temperature":{"value":17,"time":1613729721715},"Humidity":{"value":20,"time":1613729721715}}} -
Error: Si la conexión falla, aparece un mensaje de error similar al siguiente.
Use el registro de errores para comprobar el código y la configuración de red. Resuelva el problema y vuelva a ejecutar el código.
>node iot_amqp.js [connection-1] disconnected Error: getaddrinfo ENOTFOUND iot-xxx.b.aliyuncs.com at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:67:26) { errno: -3008, code: 'ENOTFOUND', syscall: 'getaddrinfo', hostname: 'ixxx.iyuncs.com' }
Referencias
Para más información sobre los códigos de error de los mensajes de suscripción del lado del servidor, consulte Message-related error codes.