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

IoT Platform:Paho MQTT for Java 接続例

最終更新日:Jun 04, 2026

Paho MQTT for Java ライブラリを使用してデバイスを IoT Platform に接続し、モノモデルを介して通信します。

前提条件

プロダクトとデバイスは、IoT Platformコンソールで作成されます。 LightSwitchプロパティは、[製品の詳細] ページの [機能の定義] タブで定義します。

詳細については、「プロダクトの作成」「デバイスの作成」「TSL機能の追加」をご参照ください。

開発環境の準備

開発環境:

Paho MQTT for Java ライブラリのダウンロード

ご使用の MQTT バージョンに基づいて、Maven プロジェクトに次の依存関係を追加します。

重要

公式サイトにアクセスして最新のライブラリバージョンを確認し、それに応じて version の値を更新してください。

  • MQTT 3.1 および 3.1.1

    <dependencies>
      <dependency>
          <groupId>org.eclipse.paho</groupId>
          <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
          <version>1.2.1</version>
        </dependency>
    </dependencies>
  • MQTT 5.0

    <dependency>
       <groupId>org.eclipse.paho</groupId>
       <artifactId>org.eclipse.paho.mqttv5.client</artifactId>
       <version>1.2.5</version>
    </dependency>

IoT Platform への接続

  1. MqttSign.java をクリックして、MQTT 接続パラメーターを計算するためのソースコードを取得します。

    MqttSign.java ファイルは MqttSign クラスを定義しています。

    • プロトタイプ:

      class MqttSign
    • 説明

      このクラスを使用すると、MQTT接続パラメーターusernamepasswordclientidを取得できます。

    • メンバー:

      メソッドの説明

      public void

      calculate(String productKey, String deviceName, String deviceSecret)

      デバイスの productKeydeviceName、および deviceSecret に基づいて、MQTT 接続パラメーターの usernamepasswordclientid を計算します。

      public String

      getUsername()

      MQTT 接続パラメーターの username を取得します。

      public String

      getPassword()

      MQTT 接続パラメーターの password を取得します。

      public String

      getClientid()

      MQTT 接続パラメーターの clientid を取得します。

  2. IntelliJ IDEA を開き、プロジェクトを作成します。

  3. MqttSign.java ファイルをプロジェクトにインポートします。

  4. プロジェクトに、デバイスを IoT Platform に接続するためのプログラムファイルを追加します。

    MqttSign.javaMqttSign クラスを呼び出して MQTT 接続パラメーターを計算し、IoT Platform に接続するプログラムを作成します。

    開発手順とサンプルコード:

    • MqttSign を呼び出して MQTT 接続パラメーターを計算します。

      String productKey = "a1X2bEn****";
      String deviceName = "example1";
      String deviceSecret = "ga7XA6KdlEeiPXQPpRbAjOZXwG8y****";
      // MQTT 接続パラメーターを計算します。
      MqttSign sign = new MqttSign();
      sign.calculate(productKey, deviceName, deviceSecret);
      System.out.println("username: " + sign.getUsername());
      System.out.println("password: " + sign.getPassword());
      System.out.println("clientid: " + sign.getClientid());
    • Paho MQTT クライアントを使用して IoT Platform に接続します。

      // IoT Platform に接続するためのエンドポイント。
      String port = "443";
      String broker = "ssl://" + productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" + ":" + port;
      // Paho MQTT クライアント。
      MqttClient sampleClient = new MqttClient(broker, sign.getClientid(), persistence);
      // Paho MQTT 接続パラメーター。
      MqttConnectOptions connOpts = new MqttConnectOptions();
      connOpts.setCleanSession(true);
      connOpts.setKeepAliveInterval(180);
      connOpts.setUserName(sign.getUsername());
      connOpts.setPassword(sign.getPassword().toCharArray());
      sampleClient.connect(connOpts);
      System.out.println("Broker: " + broker + " Connected");
      重要

      コード行 String broker = "ssl://" + productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" + ":" + port; のエンドポイントを修正してください。broker の値は "ssl://" + "${お使いのインスタンスの MQTT エンドポイント}" + ":" + port の形式である必要があります。

      パブリックインスタンスおよびEnterprise Editionインスタンスのエンドポイントとエンドポイントの形式の詳細については、「インスタンスのエンドポイントの表示」をご参照ください。

    • メッセージをパブリッシュします。

      モノモデルで定義された LightSwitch プロパティをポストします。

      // Paho MQTT を使用してメッセージをパブリッシュします。
      String topic = "/sys/" + productKey + "/" + deviceName + "/thing/event/property/post";
      String content = "{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":1}}";
      MqttMessage message = new MqttMessage(content.getBytes());
      message.setQos(0);
      sampleClient.publish(topic, message);

      MQTT 5.0 の場合、メッセージをパブリッシュする際にカスタムプロパティを追加します。

      // MQTT 5.0 の機能: ユーザー定義プロパティ
      MqttProperties properties = new MqttProperties();
      List<UserProperty> userPropertys = new ArrayList<>();
      userPropertys.add(new UserProperty("key1","value1"));
      properties.setUserProperties(userPropertys);
      // MQTT 5.0 の機能: リクエスト/レスポンスモード
      properties.setCorrelationData("requestId12345".getBytes());
      properties.setResponseTopic("/" + productKey + "/" + deviceName + "/user/get");
      message.setProperties(properties);
      // MQTT 5.0 用の Paho SDK は、デフォルトでトピックエイリアスを使用します。
      sampleClient.publish(topic, message);

      モノモデルのデータ形式は「デバイスのプロパティ、イベント、およびサービス」で定義されています。

      カスタムトピック通信については、「トピックとは」で説明されています。

    • トピックをサブスクライブして、IoT Platform からのメッセージを受信します。

      トピックをサブスクライブして、IoT Platform からのプロパティポストへの応答を受信します。

      class MqttPostPropertyMessageListener implements IMqttMessageListener {
          @Override
          public void messageArrived(String var1, MqttMessage var2) throws Exception {
              System.out.println("reply topic  : " + var1);
              System.out.println("reply payload: " + var2.toString());
          }
      }
      ...
      // Paho MQTT を使用してトピックをサブスクライブします。
      String topicReply = "/sys/" + productKey + "/" + deviceName + "/thing/event/property/post_reply";
      sampleClient.subscribe(topicReply, new MqttPostPropertyMessageListener());

    デバイス、サーバー、およびIoT Platformの通信方法については、「デバイス、IoT platform、およびサーバー間の通信の概要」をご参照ください。

  5. [Build Project] ボタン build をクリックして、プロジェクトをコンパイルします。

サンプルプロジェクトの実行

ビルド済みのサンプルプロジェクトを使用して、デバイスを IoT Platform に接続します。

  1. コードパッケージ (v3.1.1Demo または v5.0Demo) をダウンロードして解凍します。

  2. IntelliJ IDEA を開き、解凍したパッケージから aiot-java-demo サンプルプロジェクトをインポートします。

  3. pom.xml ファイルで、「Paho MQTT for Java ライブラリのダウンロード」セクションで説明されているように Maven の依存関係のバージョンを更新してください。

    重要

    依存関係のバージョンが利用できない場合は、Maven Central などの公式リポジトリで有効なバージョンを確認してください。

  4. src/main/java/com.aliyun.iot ディレクトリで、App または Mqtt5App ファイルを開き、サンプルのデバイス認証情報をご自身のものに置き換えてください。

    説明

    MQTT 3.1 または 3.1.1 経由の通信には App ファイルを使用します。MQTT 5.0 経由の通信には Mqtt5App ファイルを使用します。

    • 次のコードで、productKeydeviceName、および deviceSecret の値を実際のデバイス認証情報に置き換えてください。

      String productKey = "${ProductKey}";
      String deviceName = "${DeviceName}";
      String deviceSecret = "${DeviceSecret}";
    • IoT Platform への接続」セクションのステップ 4 で説明されているように、コード行 String broker = "ssl://" + productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" + ":" + port; のエンドポイントを修正してください。

  5. App または Mqtt5App プログラムを実行します。

    成功すると、次のログが表示されます。

    username: example1&a1X2bxxx
    password: 5c9d47198d9d09050043e1f3xxx
    clientid: a1X2bxxx.example1|timestamp=1576140939022,_v=paho-java-1.0.0,securemode=2,signmethod=hmacsha256|
    broker: ssl://a1X2bxxx.iot-as-mqtt.cn-shanghai.aliyuncs.com:443 Connected
    subscribe: /sys/a1X2bxxx/example1/thing/event/property/post_reply
    publish: {"id":"1","version":"1.0","params":{"LightSwitch":1}}
    reply topic  : /sys/a1X2bxxx/example1/thing/event/property/post_reply
    reply payload: {"code":200,"data":{},"id":"1","message":"success","method":"thing.event.property.post","version":"1.0"}
    Disconnected
    Process finished with exit code 0

    IoT Platform コンソールにログインして、インスタンス内のデバイスのステータスとログを確認します。

    • 左側のナビゲーションペインで、[デバイス管理] > [デバイス] を選択します。デバイスのステータスが [オンライン] になっていることを確認できます。

    • 左側のナビゲーションペインで、[メンテナンス] > [デバイスログ] を選択します。[クラウド側ログ]と[デバイス側ログ]を表示できます。詳細については、クラウド側ログデバイス側ログをご参照ください。

      Mqtt5App ファイルを使用する場合、ログの詳細で報告されたカスタムプロパティを表示できます。

      ログ詳細の [Property] フィールドで、[{"Value":"value1","Key":"key1"}] のような報告されたカスタムプロパティ値を見つけることができます。

エラーコード

デバイスがIoT PlatformへのMQTT接続を確立できない場合は、エラーコードに基づいて問題をトラブルシューティングできます。 詳細については、「トラブルシューティング」をご参照ください。