Todos los productos
Search
Centro de documentos

IoT Platform:Ejemplo de conexión de Paho MQTT para Java

Última actualización: Sep 07, 2026

Utilice la biblioteca Paho MQTT para Java para conectar un dispositivo a IoT Platform y comunicarse mediante el modelo de cosas.

Requisitos previos

Ya creó un producto y un dispositivo en IoT Platform. Además, definió la propiedad LightSwitch para el producto en la pestaña Function Definition.

Para obtener más información, consulte Create a product, Create a single device y Add a TSL model for a single product.

Preparar el entorno de desarrollo

Entorno de desarrollo:

Descargar la biblioteca Paho MQTT para Java

Agregue la siguiente dependencia a su proyecto de Maven según su versión de MQTT:

Importante

Visite el sitio web oficial para comprobar la versión más reciente de la biblioteca y actualice el valor de version en consecuencia.

  • MQTT 3.1 y 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>

Conectar a IoT Platform

  1. Haga clic en MqttSign.java para obtener el código fuente que calcula los parámetros de conexión MQTT.

    El archivo MqttSign.java define la clase MqttSign:

    • Prototipo:

      class MqttSign
    • Función:

      Calcula los valores de username, password y clientID, obligatorios para conectar un dispositivo a IoT Platform mediante MQTT.

    • Miembros:

      Tipo

      Descripción del método

      public void

      calculate(String productKey, String deviceName, String deviceSecret)

      Calcula los parámetros de conexión MQTT username, password y clientid a partir de los valores productKey, deviceName y deviceSecret del dispositivo.

      public String

      getUsername()

      Obtiene el parámetro de conexión MQTT username.

      public String

      getPassword()

      Obtiene el parámetro de conexión MQTT password.

      public String

      getClientid()

      Obtiene el parámetro de conexión MQTT clientid.

  2. Abra IntelliJ IDEA y cree un proyecto.

  3. Importe el archivo MqttSign.java a su proyecto.

  4. En su proyecto, agregue un archivo de programa para conectar el dispositivo a IoT Platform.

    Escriba un programa que llame a la clase MqttSign del archivo MqttSign.java para calcular los parámetros de conexión MQTT y conectarse a IoT Platform.

    Instrucciones de desarrollo y código de ejemplo:

    • Llame a MqttSign para calcular los parámetros de conexión MQTT.

      String productKey = "a1X2bEn****";
      String deviceName = "example1";
      String deviceSecret = "ga7XA6KdlEeiPXQPpRbAjOZXwG8y****";
      // Calculate the MQTT connection parameters.
      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());
    • Use un cliente Paho MQTT para conectarse a IoT Platform.

      // The endpoint for connecting to IoT Platform.
      String port = "443";
      String broker = "ssl://" + productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" + ":" + port;
      // The Paho MQTT client.
      MqttClient sampleClient = new MqttClient(broker, sign.getClientid(), persistence);
      // The Paho MQTT connection parameters.
      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");
      Importante

      Modifique el endpoint en la línea de código String broker = "ssl://" + productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" + ":" + port;. El valor de broker debe tener el formato "ssl://" + "${MQTT endpoint for your instance}" + ":" + port.

      Para obtener más información sobre los formatos de endpoint de las instancias públicas y Enterprise, consulte View instance endpoints.

    • Publique un mensaje.

      Reporte la propiedad LightSwitch definida en el modelo de cosas:

      // Publish a message using 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);

      Para MQTT 5.0, agregue propiedades personalizadas al publicar un mensaje:

      // MQTT 5.0 feature: User-defined properties
      MqttProperties properties = new MqttProperties();
      List<UserProperty> userPropertys = new ArrayList<>();
      userPropertys.add(new UserProperty("key1","value1"));
      properties.setUserProperties(userPropertys);
      // MQTT 5.0 feature: request-response mode
      properties.setCorrelationData("requestId12345".getBytes());
      properties.setResponseTopic("/" + productKey + "/" + deviceName + "/user/get");
      message.setProperties(properties);
      // The Paho SDK for MQTT 5.0 uses topic aliases by default.
      sampleClient.publish(topic, message);

      El formato de datos del modelo de cosas se define en Device properties, events, and services.

      La comunicación mediante temas personalizados se explica en What is a topic?.

    • Suscríbase a un tema para recibir mensajes de IoT Platform.

      Suscríbase a un tema para recibir las respuestas de publicación de propiedades desde 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());
          }
      }
      ...
      // Subscribe to a topic using Paho MQTT.
      String topicReply = "/sys/" + productKey + "/" + deviceName + "/thing/event/property/post_reply";
      sampleClient.subscribe(topicReply, new MqttPostPropertyMessageListener());

    Consulte los patrones de comunicación entre dispositivos y la nube en Overview of communications among devices, IoT platform, and servers.

  5. Haga clic en el botón Build Project build para compilar el proyecto.

Ejecutar el proyecto de ejemplo

Conecte un dispositivo a IoT Platform mediante el proyecto de ejemplo precompilado.

  1. Descargue un paquete de código (v3.1.1Demo o v5.0Demo) y descomprímalo.

  2. Abra IntelliJ IDEA e importe el proyecto de ejemplo aiot-java-demo desde el paquete descomprimido.

  3. En el archivo pom.xml, actualice las versiones de las dependencias de Maven como se indica en la sección Descargar la biblioteca Paho MQTT para Java.

    Importante

    Si una versión de dependencia no está disponible, compruebe su repositorio oficial, como Maven Central, para encontrar una versión válida.

  4. En el directorio src/main/java/com.aliyun.iot, abra el archivo App o Mqtt5App y reemplace las credenciales del dispositivo de ejemplo por las suyas.

    Nota

    Use el archivo App para comunicarse mediante MQTT 3.1 o 3.1.1. Use el archivo Mqtt5App para comunicarse mediante MQTT 5.0.

    • En el siguiente código, reemplace los valores de productKey, deviceName y deviceSecret por las credenciales de su dispositivo.

      String productKey = "${ProductKey}";
      String deviceName = "${DeviceName}";
      String deviceSecret = "${DeviceSecret}";
    • Modifique el endpoint en la línea de código String broker = "ssl://" + productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" + ":" + port;, tal como se describe en el paso 4 de la sección Conectar a IoT Platform.

  5. Ejecute el programa App o Mqtt5App.

    Si la operación es exitosa, aparecen los siguientes registros:

    username: example1&a1xxx
    password: 5c9d47198d9d09050043e1f3xxx
    clientid: a1Xxxx.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/a1Xxxx/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

    Inicie sesión en la consola de IoT Platform para consultar el estado y los registros del dispositivo en su instancia.

    • En el panel de navegación izquierdo, elija Device Management > Devices. Verá que el estado del dispositivo es Online.

    • En el panel de navegación izquierdo, elija Maintenance > Device Log. Puede consultar el Cloud-side Log y el Device-side Log. Cloud-side Log. Device-side Log.

      Si utiliza el archivo Mqtt5App, puede consultar las propiedades personalizadas reportadas en los detalles del registro.

      En el campo Property de los detalles del registro, encontrará los valores de las propiedades personalizadas reportadas, como [{"Value":"value1","Key":"key1"}].

Códigos de error

Si el dispositivo no logra conectarse a IoT Platform mediante MQTT, utilice los códigos de error para solucionar el problema. Para obtener más información sobre los códigos de error del servidor, consulte Troubleshooting.