デバイスがIoT Platformに接続されると、デバイスはIoT Platformにデータを送信します。 その後、Advanced Message Queuing Protocol (AMQP) を使用して、データをサーバーに転送できます。 このトピックでは、AMQPサーバー側サブスクリプションを設定する方法について説明します。 このようにして、サーバーはAMQPクライアントを使用して街灯からデータを受信できます。
前提条件
デバイスがIoT Platformに接続され、データが送信されます。 詳細については、「デバイスをIoT Platformに接続してデータを送信する」をご参照ください。
開発環境の準備
この例では、Javaを使用して、AMQP (Advanced Message Queuing Protocol) クライアントのサンプルを開発します。 Apache Qpid JMSクライアントを使用することを推奨します。 クライアントをダウンロードして手順を表示するには、「Qpid JMS 0.57.0」をご参照ください。
この例では、開発環境で次のコンポーネントが使用されています。
オペレーティングシステム: Windows 10 (64ビット)
Java開発キット (JDK): JDK 8
統合開発環境 (IDE): IntelliJ IDEAコミュニティエディション
AMQPサーバー側サブスクリプションの設定
IoT Platformコンソールの [概要] タブで、[IoT_Test_環境] をクリックします。
メッセージを消費するようにコンシューマグループを設定します。 サーバーは、コンシューマーグループをリッスンすることでメッセージを取得できます。
左側のナビゲーションウィンドウで、 を選択します。 [サーバー側サブスクリプション] ページで、[コンシューマーグループ] をクリックします。
[コンシューマーグループ] タブで、[コンシューマーグループの作成] をクリックします。
[コンシューマーグループの作成] ダイアログボックスで、コンシューマーグループ名パラメーターをReceive_Thermostat_Dataに設定し、[OK] をクリックします。
コンシューマーグループが作成されると、コンシューマーグループの詳細ページが表示されます。 ページでコンシューマーグループIDを確認できます。 コンシューマーグループIDをコピーして保存する必要があります。 IDは、AMQPクライアントをIoT Platformに接続するときに必要です。
サーモスタットデバイスが属する製品のサーバー側サブスクリプションを設定します。 これにより、サーバーは製品のさまざまな種類のメッセージをサブスクライブできます。
左側のナビゲーションウィンドウで、 を選択します。
サーバー側サブスクリプションページの [サブスクリプション] タブで、[サブスクリプションの作成] をクリックします。
[サブスクリプションの作成] ダイアログボックスでパラメーターを設定し、[OK] をクリックします。 下表に、各パラメーターを説明します。
パラメーター
説明
プロダクト
[ホーム_サーモスタット] を選択します。
サブスクリプションタイプ
[AMQP] を選択します。
消費者グループ
前の手順で作成したReceive_Thermostat_Dataコンシューマーグループを選択します。
メッセージタイプ
[デバイスアップストリーム通知] および [過去のTSLデータの送信] を選択します。 メッセージタイプの詳細については、「サブスクリプションの設定」をご参照ください。
データ転送機能を使用してAMQPコンシューマグループにデータを送信し、AMQPクライアントを使用してメッセージを受信できます。 たとえば、Thermostat_Data_Forwardingルールを使用して、送信されたTSLデータをReceive_Thermostat_dataコンシューマーグループに転送します。 詳細については、「AMQPコンシューマグループへのデータ転送」をご参照ください。
AMQPクライアントをIoT Platformに接続する
IntelliJ IDEAを開き、サンプルプロジェクト
amqp-demoをデモパッケージにインポートします。pom.xmlファイルには、Qpid JMSクライアントをダウンロードするためのMaven依存関係が追加されています。src/main/java/com.aliyun.iotx.de moディレクトリに格納されているAmqpClient.javaファイルで、JMSクライアントをIoT Platformに接続するために必要なパラメーターを設定します。 次の表にパラメーターを示します。
プライベート静的文字列accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); プライベート静的文字列accessSecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); プライベート静的文字列consumerGroupId = "1yRO *****************"; // iotInstanceId: インスタンスのID。 2021年7月30日より前にアクティブ化されたパブリックインスタンスを使用する場合は、パラメーターに空の文字列を指定します。 プライベート静的文字列iotInstanceId = "iot-cn-******"; // clientIdパラメーターの値は、サービスサブスクリプションのコンシューマーグループステータスページのクライアントIDとしてIoT Platformコンソールに表示されます。 // clientIdパラメーターの値として、UUID、MACアドレス、IPアドレスなどの一意の識別子を使用することを推奨します。 これにより、クライアントを識別できます。 プライベート静的String clientId = "test_IoT"; //${YourHost} はエンドポイントを指定します。 エンドポイントの詳細については、「AMQPクライアントをIoT Platformに接続する」トピックを参照してください。 プライベート静的文字列ホスト="iot-cn-****** .amqp.iothub.aliyuncs.com"; // プロセスで確立する接続の数。 // 接続の1秒あたりの消費クエリ (QPS) は制限されています。 最大64個の接続を指定できます。 詳細については、「制限」のトピックを参照してください。 // 接続数と対応する消費量QPSは、リバランス方式に関連しています。 消費量QPSが500増加するたびに、接続数を1ずつ増やすことを推奨します。 プライベート静的int connectionCount = 4;パラメーター
説明
accessKey
IoT Platformコンソールにログインし、プロファイル画像の上にポインターを移動し、[AccessKey管理] をクリックしてAccessKey IDとAccessKeyシークレットを取得します。
重要この例では、環境変数はAccessKeyペアを管理するように設定されています。 これにより、AccessKeyペアをビジネスコードにハードコーディングすることによって引き起こされるセキュリティリスクを防ぐことができます。
ALIBABA_CLOUD_ACCESS_KEY_IDとALIBABA_CLOUD_ACCESS_KEY_SECRET環境変数をオンプレミスオペレーティングシステムに追加し、AccessKey IDとAccessKey Secretを指定する必要があります。
accessSecret
consumerGroupId
Receive_Thermostat_DataコンシューマーグループのID。 詳細については、「AMQPサーバー側サブスクリプションの設定」セクションの手順2をご参照ください。
iotInstanceId
IoT_Test_EnvironmentインスタンスのID。 インスタンスIDは、IoT Platformコンソールの [概要] タブで確認できます。
clientId
クライアントのID。 カスタムIDを指定する必要があります。 IDは1 ~ 64文字である必要があります。 クライアントIDとして、クライアントが実行されているサーバーのUUID、MACアドレス、IPアドレスなどの一意の識別子を使用することをお勧めします。
AMQPクライアントがIoT Platformに接続して起動したら、次の手順を実行してクライアントの詳細を表示します。IoT Platformコンソールにログインし、管理するインスタンスのカードをクリックします。 左側のナビゲーションウィンドウで、 を選択します。 [コンシューマーグループ] タブで、管理するコンシューマーグループを見つけ、[操作] 列の [表示] をクリックします。 各クライアントのIDは、[コンシューマーグループのステータス] タブに表示されます。 クライアントIDを使用して、クライアントを簡単に識別できます。
host
インスタンスの購入後に保存されるAMQPエンドポイント。 詳細については、「Enterprise Editionインスタンスの購入」をご参照ください。
IoT PlatformコンソールのIoT_Test_Environmentインスタンスの [インスタンスの詳細] ページで、[開発設定の表示] および [AMQP] をクリックして、AMQP情報を表示できます。
connectionCount
AMQPクライアントで有効になっている接続の数。 最大値: 128。 このパラメーターは、リアルタイムのメッセージプッシュシナリオでのスケールアウトに使用されます。
[コンシューマーグループの詳細] ページで、接続されている各クライアントは
${clientId}+ "-" + Numberとして表示されます。 最小数は0です。AmqpClient.javaサンプルコードファイルの実行後に次の情報に似た出力が表示された場合、AMQPクライアントはIoT Platformに接続され、メッセージを受信できます。
説明この例では、
Thread.sleep(60*1000);コードスニペットが追加され、プログラムが起動して1分間実行された後にプログラムを終了します。 ビジネス要件に基づいて実行時間を指定できます。
レスポンスパラメーター
パラメーター
例
説明
topic
/**********/******/thing/event/property/post
デバイスプロパティの送信に使用されるトピック。
messageId
1324198300680719360
メッセージ ID
content
{"temperature":23,"humidity":21,"time":1604548451951}
メッセージの内容。
ログの表示
すべての設定が完了したら、IoT Platformコンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。 製品リストからHome_Thermostatを選択します。 [クラウド実行ログ] タブでログを表示できます。

