このトピックでは、Node.js 用 SDK を使用して Advanced Message Queuing Protocol(AMQP)クライアントを Alibaba Cloud IoT Platform に接続し、サーバー側サブスクリプション機能を使用して IoT Platform からメッセージを受信する方法について説明します。
前提条件
トピックのメッセージをサブスクライブするコンシューマーグループの ID を取得します。
DEFAULT_GROUP という名前のデフォルトのコンシューマーグループを使用するか、IoT Platform コンソールでコンシューマーグループを作成できます。詳細については、「コンシューマーグループを管理する」をご参照ください。
コンシューマーグループを使用して、トピックのメッセージをサブスクライブできます。詳細については、「AMQP サーバー側サブスクリプションを設定する」をご参照ください。
開発環境
Node.js 8.0.0 以降を使用できます。
SDK をダウンロードしてインストールする
rhea ライブラリを使用することをお勧めします。ライブラリをダウンロードして手順を表示するには、rhea にアクセスしてください。
この例では、npm install rhea コマンドを使用して rhea ライブラリをダウンロードします。
手順
Node.js サンプルコードを保存するために、コンピューター上に amqp.js などの JavaScript ファイルを作成します。
次の表のパラメーターの説明に基づいて、サンプルコードのパラメーターを設定できます。
重要有効なパラメーター値を指定していることを確認してください。そうでない場合、AMQP クライアントは IoT Platform に接続できません。
const container = require('rhea'); const crypto = require('crypto'); // AccessKey ペアをプロジェクトコードにハードコードすると、プロジェクトコードが漏洩した場合に AccessKey ペアが公開される可能性があります。この場合、アカウント内のリソースは安全ではなくなります。次のサンプルコードは、環境変数から AccessKey ペアを取得する方法の例を示しています。この例は参照用です。 var accessKey = process.env['ALIBABA_CLOUD_ACCESS_KEY_ID']; var accessSecret = process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET']; // 接続を作成します。 var connection = container.connect({ // エンドポイント。詳細については、「AMQP クライアントを IoT Platform に接続する」トピックを参照してください。 'host': '${YourHost}', 'port': 5671, 'transport':'tls', 'reconnect':true, 'idle_time_out':60000, // userName パラメーターの構造。詳細については、「AMQP クライアントを IoT Platform に接続する」トピックを参照してください。 'username':'${YourClientId}|authMode=aksign,signMethod=hmacsha1,timestamp=1573489088171,authId=' + accessKey + ',iotInstanceId=${YourIotInstanceId},consumerGroupId=${YourConsumerGroupId}|', // 署名を計算します。パスワードの構成方法の詳細については、「AMQP クライアントを IoT Platform に接続する」トピックを参照してください。 'password': hmacSha1(accessSecret, 'authId='+ accessKey +'×tamp=1573489088171'), }); // レシーバーリンクを作成します。 var receiver = connection.open_receiver(); // IoT Platform からメッセージを受信したときに呼び出されるコールバック関数。 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(); }); // パスワード署名を計算します。 function hmacSha1(key, context) { return Buffer.from(crypto.createHmac('sha1', key).update(context).digest()) .toString('base64'); }パラメーター
例
説明
host
iot-cn-***.amqp.iothub.aliyuncs.com
AMQP クライアントが IoT Platform に接続するために使用するエンドポイント。
${YourHost}変数に指定できるエンドポイントの詳細については、「インスタンスのエンドポイントを管理する」をご参照ください。username
'test |authMode=aksign,signMethod=hmacsha1,timestamp=1573489088171,authId=LTAI****************,iotInstanceId=,consumerGroupId=DEFAULT_GROUP|'
IoT Platform に接続するために必要な認証情報。説明:
${YourClientId}: この変数をクライアント ID に置き換えます。ビジネス要件に基づいてカスタムクライアント ID を指定できます。クライアント ID は 64 文字を超えることはできません。クライアントを実行するサーバーの UUID、MAC アドレス、IP アドレスなど、一意の識別子をクライアント ID として使用することをお勧めします。AMQP クライアントが IoT Platform に接続して起動した後、次の手順を実行してクライアントの詳細を表示します。IoT Platform コンソールにログインし、管理する インスタンス のカードをクリックします。左側のナビゲーションウィンドウで、 を選択します。[コンシューマーグループ] タブで、管理するコンシューマーグループを見つけ、[アクション] 列の [表示] をクリックします。各クライアントの ID は、[コンシューマーグループステータス] タブに表示されます。クライアント ID を使用して、クライアントを簡単に識別できます。
${YourAccessKeyId}および${YourAccessKeySecret}: 変数を AccessKey ID と AccessKey シークレットに置き換えます。IoT Platform コンソールにログインし、右上隅のプロファイル画像にポインターを移動して、[accesskey 管理] をクリックして、AccessKey ID と AccessKey シークレットを取得します。
説明Resource Access Management (RAM) ユーザーを使用する場合は、AliyunIOTFullAccess ポリシーを RAM ユーザーにアタッチする必要があります。このポリシーにより、RAM ユーザーは IoT Platform リソースを管理できます。そうでない場合、IoT Platform への接続は失敗します。詳細については、「RAM ユーザーとして IoT Platform にアクセスする」をご参照ください。
${YourIotInstanceId}: この変数をインスタンス ID に置き換えます。IoT Platform コンソール にログインします。[概要] タブで、インスタンスの ID を表示します。
重要[概要] タブが表示されない場合、または インスタンスに ID がない場合は、${YourIotInstanceId} 変数を削除します。
${YourConsumerGroupId}: この変数をコンシューマーグループの ID に置き換えます。コンシューマーグループの ID を表示するには、次の手順を実行します。IoT Platform コンソールにログインし、管理する インスタンス のカードをクリックします。左側のナビゲーションウィンドウで、 を選択します。ID は [コンシューマーグループ] タブに表示されます。
password
hmacSha1('iMS8ZhCDd***'*, 'authId=LTAI****************×tamp=1573489088171')
コマンドプロンプトを開き、cd コマンドを実行して、amqp.js ファイルが保存されているディレクトリに移動します。次に、npm コマンドを実行して rhea ライブラリをダウンロードします。次の図は、ライブラリがダウンロードされた後のディレクトリ構造を示しています。
npm install rhea
コマンドプロンプトで次のコマンドを実行して、amqp.js ファイルを実行します。このようにして、AMQP クライアントが起動されます。
node amqp.js
サンプル結果
次の出力に類似した情報が表示された場合、AMQP クライアントは IoT Platform に接続されており、メッセージを受信できます。

次の出力に類似した情報が表示された場合、AMQP クライアントは IoT Platform に接続できません。
ログに基づいてコードまたはネットワーク環境を確認し、問題を解決してから、コードを再度実行できます。

関連情報
サーバー側サブスクリプション機能に関連するエラーコードの詳細については、「IoT プラットフォームログ」トピックの メッセージに関連するエラーコード セクションをご参照ください。