Cette rubrique explique comment utiliser le SDK AMQP pour Node.js afin de se connecter à Alibaba Cloud IoT Platform et de recevoir des messages via un abonnement côté serveur.
Prérequis
Vous avez obtenu l'ID d'un groupe de consommateurs et vous êtes abonné aux messages des topics requis.
Gérer les groupes de consommateurs AMQP : utilisez le groupe de consommateurs par défaut (DEFAULT_GROUP) dans IoT Platform ou créez un nouveau groupe.
Configurer un abonnement côté serveur AMQP : abonnez-vous aux messages des topics requis en utilisant un groupe de consommateurs.
Configurer l'environnement de développement
Node.js version 8.0.0 ou ultérieure est requis.
Télécharger et installer le SDK
Pour le SDK AMQP Node.js, nous recommandons la bibliothèque rhea. Consultez rhea pour télécharger la bibliothèque et consulter sa documentation.
Cet exemple utilise la commande npm install rhea pour installer la bibliothèque rhea.
Procédure
Sur un système Windows ou Linux, téléchargez et installez Node.js. Cette rubrique prend pour exemple un système Windows 10 (64 bits) et le package d'installation node-v14.15.1-x64.msi.
-
Une fois l'installation terminée, ouvrez une interface de ligne de commande et exécutez la commande suivante pour vérifier la version de Node.js.
node --versionUne installation réussie renvoie le numéro de version :
v14.15.1 -
Créez un fichier JavaScript, par exemple amqp.js, pour y placer l'exemple de code.
Modifiez les paramètres comme indiqué dans le tableau ci-dessous.
ImportantSpécifiez des valeurs de paramètres valides. Sinon, le client AMQP ne pourra pas se connecter à 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'); }Paramètre
Exemple
Description
host
iot-cn-***.amqp.iothub.aliyuncs.com
Le endpoint AMQP.
Pour le endpoint AMQP (
${YourHost}), consultez Afficher et configurer les endpoints d'instance.username
'test |authMode=aksign,signMethod=hmacsha1,timestamp=1573489088171,authId=LTAI,iotInstanceId=,consumerGroupId=DEFAULT_GROUP|'
Les informations d'authentification pour la connexion à IoT Platform. Cette chaîne contient les paramètres suivants :
-
${YourClientId}: remplacez par votre ID client. Vous pouvez définir un ID personnalisé d'une longueur maximale de 64 caractères. Nous vous recommandons d'utiliser un identifiant unique, tel que l'UUID, l'adresse MAC ou l'adresse IP du serveur qui exécute votre client AMQP.Une fois le client AMQP connecté, vous pouvez afficher ce paramètre dans la console IoT Platform. Dans la console de votre instance, accédez à . Dans l'onglet, cliquez sur View à côté de votre groupe de consommateurs. La page Consumer Group Details affiche l'ID client pour vous aider à distinguer les clients.
-
${YourAccessKeyId}et${YourAccessKeySecret}: remplacez par votre AccessKey ID et votre AccessKey Secret.Pour les obtenir, connectez-vous à la console IoT Platform, placez le pointeur sur votre photo de profil dans le coin supérieur droit, puis cliquez sur AccessKey Management.
RemarqueSi vous utilisez un utilisateur RAM, vous devez joindre la politique AliyunIOTFullAccess à l'utilisateur RAM. Sinon, la connexion échouera. Pour plus d'informations, consultez Accès utilisateur RAM.
-
${YourIotInstanceId}: remplacez par l'ID de votre instance.Connectez-vous à la console IoT Platform. Vous pouvez trouver l'ID de l'instance dans l'onglet Overview de votre instance.
ImportantSi l'onglet Overview n'est pas disponible ou si votre instance ne possède pas d'ID, supprimez le paramètre
iotInstanceId=${YourIotInstanceId}de la chaîne username. -
${YourConsumerGroupId}: remplacez par l'ID de votre groupe de consommateurs.Pour trouver l'ID de votre groupe de consommateurs, connectez-vous à la console IoT Platform. Dans la console de votre instance, accédez à .
password
hmacSha1('yourAccessKeySecret','authId=LTAI×tamp=1573489088171')
-
-
Ouvrez une interface de ligne de commande, accédez au répertoire contenant votre fichier amqp.js et exécutez la commande suivante pour installer la bibliothèque rhea :
npm install rheaUne fois la commande terminée, le répertoire racine de votre projet contient un dossier
node_modules, votre fichieramqp.jset un fichierpackage-lock.json. -
Dans la fenêtre CMD, saisissez la commande suivante pour exécuter le code amqp.js et démarrer le serveur client AMQP.
node amqp.js
Résultats de l'exemple
-
Succès : En cas de connexion réussie, le client commence à recevoir des messages et consigne une sortie similaire à celle ci-dessous. Cet exemple montre des données de température et d'humidité rapportées par un appareil.
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}}} -
Échec : Si la connexion échoue, un message d'erreur similaire à celui ci-dessous s'affiche.
Utilisez le journal des erreurs pour vérifier votre code et vos paramètres réseau. Résolvez le problème et exécutez à nouveau le code.
>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' }
Références
Pour plus d'informations sur les codes d'erreur des messages d'abonnement côté serveur, consultez Codes d'erreur liés aux messages.