すべてのプロダクト
Search
ドキュメントセンター

IoT Platform:Java 用 SDK を使用してクライアントを IoT Platform に接続する

最終更新日:Mar 22, 2025

このトピックでは、Advanced Message Queuing Protocol(AMQP)プロトコルを使用する Java Message Service(JMS)クライアントを Alibaba Cloud IoT Platform に接続し、サーバー側サブスクリプション機能を使用して IoT Platform からメッセージを受信する方法について説明します。

前提条件

トピックのメッセージをサブスクライブするコンシューマーグループの ID を取得します。

開発環境

この例では、開発環境は次のコンポーネントで構成されています。

Apache Qpid JMS クライアントをダウンロードする

クライアントをダウンロードして手順を表示するには、Qpid JMS 0.57.0 にアクセスしてください。

この例では、Qpid JMS クライアントをダウンロードするために、次の依存関係が Maven プロジェクトに追加されます。

<!-- amqp 1.0 qpid client -->
 <dependency>
   <groupId>org.apache.qpid</groupId>
   <artifactId>qpid-jms-client</artifactId>
   <version>0.57.0</version>
 </dependency>
 <!-- util for base64-->
 <dependency>
   <groupId>commons-codec</groupId>
  <artifactId>commons-codec</artifactId>
  <version>1.10</version>
</dependency>

デモ

Alibaba Cloud アカウントまたは RAM ユーザーを使用して、AMQP クライアントを使用して IoT Platform からメッセージを受信できます。たとえば、企業 A にはアカウント A という名前の Alibaba Cloud アカウントがあり、企業 B にはアカウント B という名前の Alibaba Cloud アカウントがあります。企業 A は、アカウント A を使用して IoT Platform コンソールでサーバー側サブスクリプションを設定しています。

  • アカウント A、または直接権限が付与されている Resource Access Management (RAM) ユーザーを使用する

    説明

    RAM ユーザーを使用する場合は、iot:sub 操作を含む RAM ポリシーを RAM ユーザーにアタッチする必要があります。これにより、RAM ユーザーは IoT Platform のサーバー側サブスクリプション機能を使用できます。そうでない場合、接続は失敗します。詳細については、「IoT Platform API 操作と RAM ポリシー間のマッピング」をご参照ください。

    データセキュリティを向上させるために、RAM ロールを使用して RAM ユーザーにサーバー側サブスクリプション機能の使用を承認することをお勧めします。詳細については、次のセクションを参照してください。

    詳細については、このトピックの現在のアカウント内でサーバー側サブスクリプションメッセージを受信するセクションをご参照ください。

  • RAM ロールを引き受ける RAM ユーザーを使用する

    使用する RAM ユーザーは、アカウント A またはアカウント B に属することができます。RAM ユーザーを使用して、アカウント A 内でアクティブ化されている IoT Platform に AMQP クライアントを接続できます。これにより、サーバー側サブスクリプション機能を使用してデバイスメッセージを受信できます。

    詳細については、このトピックのRAM ロールを引き受ける RAM ユーザーとしてサーバー側サブスクリプションメッセージを受信するセクションをご参照ください。

現在のアカウント内でサーバー側サブスクリプションメッセージを受信する

  1. デモパッケージをダウンロードして解凍します。

  2. IntelliJ IDEA を開き、デモパッケージ内のサンプルプロジェクト amqp-demo-en をインポートします。

    pom.xml ファイルでは、Qpid JMS クライアントをダウンロードするための Maven 依存関係が追加されています。

  3. src/main/java/com.aliyun.iotx.demo ディレクトリの AmqpClient.java ファイルで、次の表に示す AMQP 接続パラメーターを指定します。

    重要
    • 有効なパラメーター値を指定していることを確認してください。そうでない場合、AMQP クライアントは IoT Platform に接続できません。

    • この例では、プログラムが開始して 1 分間実行された後にプログラムを終了するために、Thread.sleep(60 * 1000); コードスニペットが追加されています。ビジネス要件に基づいて期間を指定できます。

    詳細については、「AMQP クライアントを IoT Platform に接続する」をご参照ください。

    パラメーター

    説明

    accessKey

    Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID と AccessKey シークレット。

    IoT Platform コンソールにログインし、右上隅のプロフィール画像にポインターを移動して、[accesskey 管理] をクリックして、AccessKey ID と AccessKey シークレットを取得します。

    accessSecret

    consumerGroupId

    IoT Platform インスタンスのコンシューマーグループの ID。

    コンシューマーグループの ID を表示するには、次の手順を実行します。IoT Platform コンソールにログインし、管理するインスタンスのカードをクリックします。左側のナビゲーションウィンドウで、[メッセージ転送] > [サーバー側サブスクリプション] を選択します。コンシューマーグループの ID は、[コンシューマーグループ] タブに表示されます。

    iotInstanceId

    IoT Platform インスタンスの ID。IoT Platform コンソール[概要] タブでインスタンス ID を表示できます。

    • インスタンス ID が表示されている場合は、このパラメーターをインスタンス ID に設定する必要があります。

    • [概要] タブが表示されていない場合、またはインスタンスに ID がない場合は、iotInstanceId = "" の形式でこのパラメーターを空のままにします。

    clientId

    クライアントの ID。カスタム ID を指定する必要があります。ID は 1 ~ 64 文字の長さでなければなりません。クライアントが実行されているサーバーの UUID、MAC アドレス、IP アドレスなど、一意の識別子をクライアント ID として使用することをお勧めします。

    AMQP クライアントが IoT Platform に接続して起動した後、次の手順を実行してクライアントの詳細を表示します。IoT Platform コンソールにログインし、管理する インスタンス のカードをクリックします。左側のナビゲーションウィンドウで、[メッセージ転送] > [サーバー側サブスクリプション] を選択します。[コンシューマーグループ] タブで、管理するコンシューマーグループを見つけて、[操作] 列の [表示] をクリックします。各クライアントの ID は、[コンシューマーグループステータス] タブに表示されます。クライアント ID を使用して、クライアントを簡単に識別できます。

    connectionCount

    AMQP クライアントで有効になっている接続の数。最大値: 128。このパラメーターは、リアルタイムメッセージプッシュシナリオでのスケールアウトに使用されます。

    [コンシューマーグループの詳細] ページでは、接続されている各クライアントが ${clientId}+"-"+ Number として表示されます。最小数は 0 です。

    host

    AMQP クライアントが IoT Platform に接続するために使用するエンドポイント。

    ${YourHost} 変数に指定できるエンドポイントの詳細については、「インスタンスのエンドポイントを管理する」をご参照ください。

  4. AmqpClient.java プログラムを実行します。

    • 次のような出力が表示された場合、AMQP クライアントは IoT Platform に接続されており、メッセージを受信できます。

      topic = /***********/******/thing/event/property/post,
      message = 2**************7,
      content = {"temperature":29,"humidity":29,"time":1617357297270}

      パラメーター

      説明

      topic

      デバイスプロパティを送信するために使用されるトピック。

      messageId

      メッセージの ID。

      content

      メッセージの内容。

    • コードまたはネットワーク環境でエラーが発生した場合、AMQP クライアントは IoT Platform に接続できません。

      ログに基づいてコードまたはネットワーク環境を確認し、問題を解決してから、コードを再実行できます。

RAM ロールを引き受ける RAM ユーザーとしてサーバー側サブスクリプションメッセージを受信する

前提条件

RAM ユーザーには、アカウント A に属する IoT Platform サーバー側サブスクリプションリソースにアクセスするための RAM ロールが割り当てられています。詳細については、「現在の Alibaba Cloud アカウントの RAM ユーザーにサーバー側サブスクリプションの使用を承認する」および「別のアカウントの RAM ユーザーにサーバー側サブスクリプションの使用を承認する」をご参照ください。

手順

  1. デモパッケージをダウンロードして解凍します。

  2. IntelliJ IDEA を開き、デモパッケージ内のサンプルプロジェクト amqp-sts-demo をインポートします。

    pom.xml ファイルでは、Qpid JMS クライアントをダウンロードするための Maven 依存関係が追加されています。

  3. src/main/java/com/aliyun/iotx.demo ディレクトリの AmqpStsTokenClient.java ファイルで、次の表に示す AMQP 接続パラメーターを指定します。

    重要
    • 有効なパラメーター値を指定していることを確認してください。そうでない場合、AMQP クライアントは IoT Platform に接続できません。

    • Security Token Service (STS) トークンは最大 1 時間有効です。AMQP クライアントが想定どおりに IoT Platform に再接続できるように、AMQP 接続パラメーターを定期的に更新する必要があります。詳細については、デモコードの scheduledExecutorService.scheduleAtFixedRate セクションを参照してください。

    • この例では、プログラムが開始して 1 分間実行された後にプログラムを終了するために、Thread.sleep(6000 * 1000); コードスニペットが追加されています。ビジネス要件に基づいて期間を指定できます。

    詳細については、「AMQP クライアントを IoT Platform に接続する」をご参照ください。

    パラメーター

    説明

    CONNECTION_COUNT

    AMQP クライアントで有効になっている接続の数。最大値: 128。このパラメーターは、リアルタイムメッセージプッシュシナリオでのスケールアウトに使用されます。

    IoT Platform コンソールの [コンシューマーグループの詳細] ページでは、接続されている各クライアントが "clientId-"+ Number として表示されます。最小数は 0 です。

    DURATION_SECONDS

    STS トークンの有効期間。有効期間は 1 時間を超えることはできません。有効な値: 15 ~ 60。単位: 分。

    STS_ENDPOINT

    STS トークンを取得するために使用されるエンドポイント。詳細については、「エンドポイント」をご参照ください。

    STS_ACCESS_KEY

    アカウント A の RAM ロールを引き受ける RAM ユーザーの AccessKey ID と AccessKey シークレット。

    STS_ACCESS_SECRET

    STS_ROLE_ARN

    引き受ける RAM ロールの Alibaba Cloud Resource Name (ARN)。形式: acs:ram::<account-id>:role/<role-name>

    <role-name> は、小文字の RAM ロールの名前です。RAM ロールを作成した後、ロール名をクリックして、[基本情報] セクションで ARN を表示できます。

    CONSUMER_GROUP_ID

    サーバー側サブスクリプションメッセージをサブスクライブするコンシューマーグループの ID。

    コンシューマーグループ ID を表示するには、次の手順を実行します。IoT Platform コンソールにログインし、管理するインスタンスのカードをクリックします。左側のナビゲーションウィンドウで、[メッセージ転送] > [サーバー側サブスクリプション] を選択します。ID は [コンシューマーグループ] タブに表示されます。

    IOT_INSTANCE_ID

    アカウント A 内の IoT Platform インスタンスの ID。

    IoT Platform コンソール にログインして、[概要] タブでインスタンス ID を表示できます。

    • インスタンス ID が表示されている場合は、このパラメーターをインスタンス ID に設定する必要があります。

    • [概要] タブが表示されていない場合、またはインスタンスに ID がない場合は、IOT_INSTANCE_ID = "" の形式でこのパラメーターを空のままにします。

    HOST

    AMQP クライアントがアカウント A 内の IoT Platform インスタンスに接続するために使用するエンドポイント。詳細については、「インスタンスのエンドポイントを管理する」をご参照ください。

  4. AmqpStsTokenClient.java プログラムを実行します。

    • 次のような出力が表示された場合、AMQP クライアントは IoT Platform に接続されており、メッセージを受信できます。

      topic = /***********/******/thing/event/property/post,
      message = 2**************7,
      content = {"temperature":29,"humidity":29,"time":1617357297270}

      パラメーター

      説明

      topic

      デバイスプロパティを送信するために使用されるトピック。

      messageId

      メッセージの ID。

      content

      メッセージの内容。

    • コードまたはネットワーク環境でエラーが発生した場合、AMQP クライアントは IoT Platform に接続できません。

      ログに基づいてコードまたはネットワーク環境を確認し、問題を解決してから、コードを再実行できます。

関連情報

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