Este tópico demonstra como usar o SDK AMQP para Node.js a fim de se conectar à IoT Platform do Alibaba Cloud e receber mensagens por meio de assinatura no lado do servidor.
Pré-requisitos
Você já obteve um ID de grupo de consumidores e assinou as mensagens dos tópicos necessários.
Gerenciar grupos de consumidores AMQP: Utilize o grupo de consumidores padrão (DEFAULT_GROUP) na IoT Platform ou crie um novo grupo.
Configure uma assinatura no lado do servidor AMQP: Assine as mensagens dos tópicos desejados usando um grupo de consumidores.
Configure o ambiente de desenvolvimento
É necessário ter o Node.js 8.0.0 ou superior instalado.
Baixe e instale o SDK
Para o SDK AMQP em Node.js, recomendamos o uso da biblioteca rhea. Acesse rhea para baixar a biblioteca e consultar sua documentação.
Este exemplo utiliza o comando npm install rhea para instalar a biblioteca rhea.
Procedimento
Em um sistema Windows ou Linux, baixe e instale o Node.js. Este tópico usa como exemplo um sistema Windows 10 (64 bits) e o pacote de instalação node-v14.15.1-x64.msi.
-
Após a instalação, abra uma interface de linha de comando e execute o seguinte comando para verificar a versão do Node.js.
node --versionUma instalação bem-sucedida retorna o número da versão:
v14.15.1 -
Crie um arquivo JavaScript, como amqp.js, para armazenar o código de exemplo.
Modifique os parâmetros conforme descrito na tabela abaixo.
ImportanteEspecifique valores válidos para os parâmetros. Caso contrário, o cliente AMQP não conseguirá se conectar à 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
Exemplo
Descrição
host
iot-cn-***.amqp.iothub.aliyuncs.com
O endpoint AMQP.
Para obter o endpoint AMQP (
${YourHost}), consulte Visualizar e configurar endpoints de instância.username
'test |authMode=aksign,signMethod=hmacsha1,timestamp=1573489088171,authId=LTAI,iotInstanceId=,consumerGroupId=DEFAULT_GROUP|'
As credenciais de autenticação para conexão com a IoT Platform. Esta string contém os seguintes parâmetros:
-
${YourClientId}: Substitua pelo seu ID de cliente. É possível definir um ID personalizado com até 64 caracteres. Recomendamos o uso de um identificador exclusivo, como UUID, endereço MAC ou endereço IP do servidor que executa seu cliente AMQP.Após a conexão do cliente AMQP, você pode visualizar esse parâmetro no console da IoT Platform. No console da sua instância, acesse . Na aba, clique em View ao lado do seu grupo de consumidores. A página Consumer Group Details exibe o ID do cliente para ajudar na distinção entre os clientes.
-
${YourAccessKeyId}e${YourAccessKeySecret}: Substitua pelo seu AccessKey ID e AccessKey Secret.Para obtê-los, faça login no console da IoT Platform, passe o ponteiro sobre sua foto de perfil no canto superior direito e clique em AccessKey Management.
NotaSe você utilizar um usuário RAM, será necessário anexar a política AliyunIOTFullAccess a esse usuário. Caso contrário, a conexão falhará. Para mais informações, consulte Acesso de usuário RAM.
-
${YourIotInstanceId}: Substitua pelo ID da sua instância.Faça login no console da IoT Platform. O ID da instância está disponível na aba Overview da sua instância.
ImportanteSe a aba Overview não estiver disponível ou sua instância não possuir um ID, remova o parâmetro
iotInstanceId=${YourIotInstanceId}da string de nome de usuário. -
${YourConsumerGroupId}: Substitua pelo ID do seu grupo de consumidores.Para localizar o ID do grupo de consumidores, faça login no console da IoT Platform. No console da sua instância, acesse .
password
hmacSha1('yourAccessKeySecret','authId=LTAI×tamp=1573489088171')
-
-
Abra uma interface de linha de comando, acesse o diretório que contém seu arquivo amqp.js e execute o seguinte comando para instalar a biblioteca rhea:
npm install rheaApós a conclusão do comando, o diretório raiz do seu projeto conterá uma pasta
node_modules, seu arquivoamqp.jse um arquivopackage-lock.json. -
Na janela do CMD, insira o seguinte comando para executar o código amqp.js e iniciar o servidor do cliente AMQP.
node amqp.js
Resultados do exemplo
-
Sucesso: Em caso de conexão bem-sucedida, o cliente começa a receber mensagens e registra uma saída semelhante à seguinte. Este exemplo mostra dados de temperatura e umidade reportados por um 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}}} -
Falha: Se a conexão falhar, uma mensagem de erro semelhante à seguinte será exibida.
Utilize o log de erros para verificar seu código e as configurações de rede. Resolva o problema e execute o código novamente.
>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' }
Referências
Para mais informações sobre códigos de erro relacionados a mensagens de assinatura no lado do servidor, consulte Códigos de erro relacionados a mensagens.