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

:Java 用 HTTP/2 SDK を使用して接続を確立する

最終更新日:Mar 27, 2025

Java 用 HTTP/2 SDK を使用して、デバイスと IoT Platform 間の接続を確立できます。この記事では、Java 用の SDK デモを提供します。このデモを参考に SDK を開発し、デバイスメッセージを IoT Platform にアップロードできます。

前提条件

Java 用の SDK デモでは、Maven プロジェクトが使用されます。開始する前に、Maven がインストールされていることを確認してください。

手順

  1. iot-http2-sdk-demo Java 用 HTTP/2 SDK デモをダウンロードします。
  2. IntelliJ IDEA または Eclipse を使用して、デモを Maven プロジェクトにインポートします。
  3. IoT Platform コンソールからデバイスの証明書情報を取得します。詳細については、プロダクトとデバイスを作成する[ユーザーガイド] の をご参照ください。
  4. H2Client.java 構成ファイルを変更します。
    1. パラメーターを構成します。
      // IoT Platform コンソールからデバイスの ProductKey、DeviceName、および DeviceSecret を取得します。
      String productKey = "";
      String deviceName = "";
      String deviceSecret = "";
      
      // メッセージの送受信に使用するトピック。
      String subTopic = "/" + productKey + "/" + deviceName + "/get";
      String pubTopic = "/" + productKey + "/" + deviceName + "/update";
    2. HTTP/2 SDK を HTTP/2 サーバーに接続し、データ受信を構成します。
      // endPoint: https://${YourProductKey}.iot-as-http2.${region}.aliyuncs.com
      String endPoint = "https://" + productKey + ".iot-as-http2.cn-shanghai.aliyuncs.com";
      
      // クライアントデバイスの一意の識別子。
      String clientId = InetAddress.getLocalHost().getHostAddress();
      
      // 接続パラメーターを構成します。
      Profile profile = Profile.getDeviceProfile(endPoint, productKey, deviceName, deviceSecret, clientId);
      
      // 値が true の場合、デバイスがオフラインのときに送信されたすべてのメッセージが削除されます。オフラインメッセージとは、受信されていないすべての QoS=0 または QoS=1 メッセージを指します。
      profile.setCleanSession(false);
      
      // クライアントを構築します。
      MessageClient client = MessageClientFactory.messageClient(profile);
      
      // データを受信します。
      client.connect(messageToken -> {
      Message m = messageToken.getMessage();
      System.out.println("receive message from " + m);
      return MessageCallback.Action.CommitSuccess;
      });
    3. トピックをサブスクライブします。
      // トピックをサブスクライブします。HTTP/2 SDK が IoT Platform に接続されると、HTTP/2 SDK はコールバックで指定されたトピックからメッセージを受信できます。
      CompletableFuture subFuture = client.subscribe(subTopic);
      System.out.println("sub result : " + subFuture.get());
    4. データを送信します。
      // メッセージをパブリッシュします。
      MessageToken messageToken = client.publish(pubTopic, new Message("hello iot".getBytes(), 0));
      System.out.println("publish success, messageId: " + messageToken.getPublishFuture().get().getMessageId());
  5. 構成ファイルを変更した後、コードを実行します。

操作の説明

  • ID 認証

    デバイスを IoT Platform に接続するには、Profile を使用してデバイスの ID 情報とその他の関連パラメーターを構成する必要があります。次のサンプルコードは、操作パラメーターを構成する方法を示しています。

    Profile profile = Profile.getDeviceProfile(endPoint, productKey, deviceName, deviceSecret, clientId);
    MessageClient client = MessageClientFactory.messageClient(profile);
    client.connect(messageToken -> {
        Message m = messageToken.getMessage();
        System.out.println("receive message from " + m);
        return MessageCallback.Action.CommitSuccess;
    });

    Profile のパラメーター

    パラメータータイプ必須説明
    endPointStringはいhttps://${YourProductKey}.iot-as-http2.${regionId}.aliyuncs.com の形式のエンドポイント。
    • ${YourProductKey} をプロダクトキーに置き換えます。
    • ${regionId} を、IoT Platform サービスを購入したリージョンの ID に置き換えます。リージョン ID の詳細については、「リージョンとゾーン」をご参照ください。
    productKeyStringはいデバイスが属するプロダクトのキー。この情報は IoT Platform コンソールから取得できます。
    deviceNameStringはいデバイスの名前。この情報は IoT Platform コンソールから取得できます。
    deviceSecretStringはいデバイスのキー。この情報は IoT Platform コンソールから取得できます。
    clientIdStringはいクライアントデバイスの一意の識別子。
    cleanSessionBooleanいいえデバイスがオフラインのときに送信されたキャッシュされたメッセージを削除するかどうかを示します。
    heartBeatIntervalLongいいえハートビート間隔(ミリ秒)。
    heartBeatTimeOutLongいいえハートビートタイムアウト時間(ミリ秒)。
    multiConnectionBooleanいいえ複数接続を有効にするかどうかを示します。デバイスの ProductKey と DeviceName を使用して IoT Platform に接続する場合は、このパラメーターを false に設定します。
    callbackThreadCorePoolSizeIntegerいいえコールバックスレッドのコアプールのサイズ。
    callbackThreadMaximumPoolSizeIntegerいいえコールバックスレッドプールの最大スレッド数。
    callbackThreadBlockingQueueSizeIntegerいいえコールバックスレッドプールのブロッキングキューのサイズ。
    authParamsMapいいえカスタム認証パラメーター。
  • 接続の確立

    MessageClient が生成された後、接続確立操作を呼び出してデバイスを IoT Platform に接続します。デバイスは、ID 認証に合格した後でのみ、IoT Platform にメッセージを送信し、IoT Platform からメッセージを受信できます。接続が確立されると、サーバーはすぐにサブスクライブされたメッセージを HTTP/2 SDK にプッシュします。そのため、接続を確立するときは、デフォルトのメッセージ受信操作を構成して、コールバックが構成されていないメッセージを受信する必要があります。次のサンプルコードは、接続確立操作を示しています。

    void connect(MessageCallback messageCallback);
  • メッセージのサブスクリプション
    /**
    * トピックをサブスクライブします。
    * @param  topic              トピック
    * @return completableFuture  サブスクライブ結果用
    */
    
    CompletableFuture subscribe(String topic);
    
    /**
    * トピックをサブスクライブし、トピックのコールバックを指定します。
    * @param  topic              トピック
    * @param  messageCallback    このトピックでメッセージを受信したときのコールバック
    * @return completableFuture  サブスクライブ結果用
    */
    CompletableFuture subscribe(String topic, MessageCallback messageCallback);
    
    /**
    * トピックのサブスクリプションを解除します。
    *
    * @param  topic               トピック
    * @return completableFuture   サブスクリプション解除結果用
    */
    CompletableFuture unsubscribe(String topic);
  • メッセージの受信

    メッセージ受信を構成する前に、MessageCallback 操作を構成する必要があります。さらに、接続パラメーターを構成するか、トピックをサブスクライブするときに、MessageClient を渡す必要があります。次のサンプルコードは、メッセージ受信操作を示しています。

    /**
    * 
    * @param  messageToken  メッセージトークン
    * @return Action        消費後のアクション
    */
    Action consume(final MessageToken messageToken);

    この操作は、HTTP/2 SDK が MessageToken.getMessage を呼び出すことによってメッセージを受信した後に呼び出されます。操作はスレッドプールで呼び出されます。スレッドのセキュリティの問題に注意してください。戻り値は、QoS=0 および QoS=1 メッセージの ACK を返すかどうかを決定します。次の表は、戻り値について説明しています。

    戻り値説明
    Action.CommitSuccessACK が返されます。
    Action.CommitFailureACK は返されません。HTTP/2 SDK は後でメッセージを再度受信します。
    Action.CommitAckManuallyACK は自動的に返されません。MessageClient.ack() を呼び出して、ACK を手動で返す必要があります。
  • メッセージの送信
    /**
    * 指定されたトピックにメッセージをパブリッシュします。
    *
    * @param  topic              メッセージトピック
    * @param  message            メッセージエンティティ
    * @return completableFuture  パブリッシュ結果用
    */
    MessageToken publish(String topic, Message message);