本文介紹使用Node.js語言的AMQP SDK接入阿里雲物聯網平台,接收服務端訂閱訊息的樣本。
開發環境
支援使用的開發環境為Node.js 8.0.0及以上版本。
下載安裝SDK
Node.js版本AMQP SDK,推薦使用rhea。請訪問rhea下載庫和查看使用說明。
本文樣本使用命令npm install rhea
,下載rhea庫。
程式碼範例
在Windows系統或Linux系統下載並安裝Node.js。本文以Windows 10(64位)系統為例,下載安裝包node-v14.15.1-x64.msi。
安裝成功後,開啟CMD視窗,通過以下命令查看node版本。
node --version
顯示如下版本號碼,表示安裝成功。
v14.15.1
在本機電腦建立一個JavaScript檔案(例如amqp.js),用來存放Node.js範例程式碼。
範例程式碼如下,按照以下表格中的參數說明,修改代碼中的參數值。
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}×tamp=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'); }
參數
樣本
說明
host
233***.iot-amqp.cn-shanghai.aliyuncs.com
AMQP接入網域名稱。
${YourHost}
對應的AMQP接入網域名稱資訊,請參見查看和配置執行個體終端節點資訊(Endpoint)。username
'test |authMode=aksign,signMethod=hmacsha1,timestamp=1573489088171,authId=LTAI4GFGQvKuqHJhFa******,iotInstanceId=,consumerGroupId=DEFAULT_GROUP|'
接入物聯網平台的身份認證資訊。其中:
${YourClientId}
:替換為用戶端ID,可自訂,長度不可超過64個字元。建議使用您的AMQP用戶端所在伺服器UUID、MAC地址、IP等唯一標識。AMQP用戶端接入並啟動成功後,登入物聯網平台控制台,在對應執行個體的 頁簽,單擊消費組對應的查看,消費組詳情頁面將顯示該參數,方便您識別和區分不同的用戶端。
${YourAccessKeyId}
、${YourAccessKeySecret}
:替換為您物聯網平台的AccessKey ID和AccessKey Secret。登入物聯網平台控制台,將滑鼠移至帳號頭像上,然後單擊AccessKey管理,擷取AccessKey ID和AccessKey Secret。
說明如果使用RAM使用者,您需授予該RAM使用者管理物聯網平台的許可權(AliyunIOTFullAccess),否則將串連失敗。授權方法請參見RAM使用者訪問。
${YourIotInstanceId}
:替換為執行個體ID。公用執行個體直接刪除${YourIotInstanceId}即可。${YourConsumerGroupId}
:替換為消費組ID。登入物聯網平台控制台,在對應執行個體的 查看您的消費組ID。
password
hmacSha1('iMS8ZhCDd***', 'authId=LTAI4GFGQ***×tamp=1573489088171')
開啟CMD視窗,使用cd命令找到amqp.js檔案所在路徑,在該路徑下使用npm命令下載rhea庫。下載後,專案檔如下圖所示。
npm install rhea
在CMD視窗輸入如下命令,運行amqp.js代碼,啟動AMQP用戶端伺服器。
node amqp.js
運行結果樣本
成功:返回類似如下日誌資訊,表示AMQP用戶端已接入物聯網平台並成功接收訊息。
失敗:返回類似如下日誌資訊,表示AMQP用戶端串連物聯網平台失敗。
您可根據日誌提示,檢查代碼或網路環境,然後修正問題,重新運行代碼。