Todos los productos
Search
Centro de documentos

IoT Platform:Uso de topics personalizados para la comunicación

Última actualización: Sep 05, 2026

Los dispositivos que utilizan el protocolo MQTT para conectarse a IoT Platform se comunican mediante la suscripción a topics o la publicación de mensajes en ellos. Los topics se clasifican en topics del sistema, topics de modelo TSL y topics personalizados. Estos últimos deben definirse en la consola. Este tema describe cómo los dispositivos usan topics personalizados para comunicarse con IoT Platform y cómo esta plataforma se comunica con los servidores empresariales.

Contexto

En este ejemplo, un termómetro electrónico se suscribe a un topic personalizado para recibir instrucciones y publica mensajes en otro topic personalizado para reportar datos de temperatura. IoT Platform reenvía los datos de temperatura a un servidor de usuario a través del servidor AMQP. El servidor de usuario invoca la operación Pub para publicar mensajes en un topic personalizado y configurar remotamente la precisión del dispositivo.

自定义Topic通信

Preparación del entorno de desarrollo

En este ejemplo, tanto los dispositivos como IoT Platform utilizan SDK para Java. Por lo tanto, es necesario preparar un entorno de desarrollo Java. Puede descargar e instalar el entorno de desarrollo Java desde el sitio web oficial de Java.

En este ejemplo, el entorno de desarrollo consta de los siguientes componentes:

Creación de un producto y un dispositivo

  1. Inicie sesión en la consola de IoT Platform.

  2. En la página Overview, localice la instancia que desea gestionar y haga clic en el ID o nombre de la instancia.

  3. En el panel de navegación izquierdo, seleccione Devices > Products.

  4. Haga clic en Create Product para crear un producto de termómetro y obtener la Productkey, por ejemplo, a1uzcH0****.

    Para más información, consulte Create a product.

  5. Una vez creado el producto, haga clic en View junto al producto.

  6. En la página Product Details, haga clic en la pestaña Topic Categories. A continuación, haga clic en Custom Topic para agregar una categoría de topic personalizado.

    Para más información, consulte Use custom topics for communication.

    En este ejemplo se requieren las siguientes categorías de topics:

    • Topic de publicación del dispositivo: /a1uzcH0****/${deviceName}/user/devmsg, con permiso de Publish.

    • Topic de suscripción del dispositivo: /a1uzcH0****/${deviceName}/user/cloudmsg, con permiso de Subscribe.

  7. Haga clic en la pestaña Server-side Subscription. Luego, haga clic en Create Subscription para configurar la suscripción del lado del servidor AMQP. Suscríbase a Device Upstream Notification en el Default Consumer Group.

    La opción Device Upstream Notification incluye mensajes de topics personalizados y mensajes de modelo TSL. Para más información, consulte Configure AMQP server-side subscription.

  8. En el panel de navegación izquierdo, seleccione Devices > Devices. A continuación, agregue un dispositivo llamado device1 al producto de termómetro que creó. Obtenga la información del certificado del dispositivo, que incluye ProductKey, DeviceName y DeviceSecret.

    Para más información, consulte Create a device.

Configuración del dispositivo para enviar un mensaje al servidor

La siguiente figura muestra cómo el dispositivo envía un mensaje al servidor.

自定义Topic通信

Esta sección describe cómo configurar el servidor y el dispositivo para implementar el proceso de mensajería.

  • Conecte su cliente AMQP a IoT Platform y configúrelo para escuchar los mensajes provenientes del dispositivo. El servidor recibe los mensajes mediante el cliente AMQP. Para más información, consulte Connect an AMQP client to IoT Platform by using SDK for Java.

    Importante

    El grupo de consumidores del cliente AMQP debe encontrarse en la misma instancia de IoT Platform que el dispositivo.

  • Configure el SDK del dispositivo para conectarlo a IoT Platform y habilitar el envío de mensajes.

    • Configure los parámetros para autenticar el dispositivo.

      final String productKey = "a1*********";
      final String deviceName = "device1";
      final String deviceSecret = "***************";
      final String region = "cn-shanghai";
      final String iotInstanceId = "iot-2w****";

      Debe configurar los parámetros descritos en la siguiente tabla según sus requisitos empresariales.

      Parámetro

      Ejemplo

      Descripción

      productKey

      a1uzcH0****

      Información del certificado del dispositivo. Puede consultar esta información en la página Device Details de la consola de IoT Platform.Para más información, consulte View device details.

      deviceName

      device1

      deviceSecret

      uwMTmVAMnxB****

      region

      cn-shanghai

      ID de la región donde se encuentra su dispositivo de IoT Platform. Para más información sobre los ID de región, consulte Regions and zones.

      iotInstanceId

      iot-2w****

      ID de la instancia a la que pertenece el dispositivo.

      Puede consultar el ID de la instancia en la página Overview de la consola de IoT Platform.

      • Si se muestra el ID de la instancia, debe especificar este parámetro.

      • Si no se genera ninguna página Overview ni ningún ID para su instancia, especifique una cadena vacía (iotInstanceId = "") para el parámetro.

    • Configure los parámetros para inicializar la conexión, incluidos los parámetros de conexión MQTT, los parámetros del dispositivo y los parámetros del modelo TSL.

      LinkKitInitParams params = new LinkKitInitParams();
      //Configure the MQTT connection parameters. Link SDK uses the MQTT protocol.
      IoTMqttClientConfig config = new IoTMqttClientConfig();
      config.productKey = productKey;
      config.deviceName = deviceName;
      config.deviceSecret = deviceSecret;
      config.channelHost = productKey + ".iot-as-mqtt." + region + ".aliyuncs.com:1883";
      //Configure the device parameters.
      DeviceInfo deviceInfo = new DeviceInfo();
      deviceInfo.productKey = productKey;
      deviceInfo.deviceName = deviceName;
      deviceInfo.deviceSecret = deviceSecret;
      //Specify the initial status of the device.
      Map<String, ValueWrapper> propertyValues = new HashMap<String, ValueWrapper>();
      
      params.mqttClientConfig = config;
      params.deviceInfo = deviceInfo;
      params.propertyValues = propertyValues;

      Debe configurar los parámetros descritos en la siguiente tabla según sus requisitos empresariales.

      Parámetro

      Ejemplo

      Descripción

      config.channelHost

      config.channelHost = productKey + ".iot-as-mqtt." + region + ".aliyuncs.com:1883";

      Nombre de dominio para la conexión MQTT del dispositivo.

      • Instancia pública anterior: config.channelHost = productKey + ".iot-as-mqtt." + region + ".aliyuncs.com:1883";.

      • Nueva instancia pública e instancia Enterprise Edition: config.channelHost = iotInstanceId + ".mqtt.iothub.aliyuncs.com:1883";.

    • Inicialice los parámetros de conexión.

      //Connect and configure the callback function that is invoked after the connection is established.
      LinkKit.getInstance().init(params, new ILinkKitConnectListener() {
           @Override
           public void onError(AError aError) {
               System.out.println("Init error:" + aError);
           }
      
           //Implement the callback function.
           @Override
           public void onInitDone(InitResult initResult) {
               System.out.println("Init done:" + initResult);
           }
       });
    • Envíe un mensaje desde el dispositivo.

      Una vez que el dispositivo esté conectado a IoT Platform, podrá usarlo para enviar un mensaje al topic personalizado. Debe reemplazar el contenido de la función onInitDone con el siguiente código:

      @Override
       public void onInitDone(InitResult initResult) {
           //Specify the topic to which the message is published and the message content.
           MqttPublishRequest request = new MqttPublishRequest();
           request.topic = "/" + productKey + "/" + deviceName + "/user/devmsg";
           request.qos = 0;
           request.payloadObj = "{\"temperature\":35.0, \"time\":\"sometime\"}";
           //Publish the message and configure the callback functions that are used after the message is published.
           LinkKit.getInstance().publish(request, new IConnectSendListener() {
               @Override
               public void onResponse(ARequest aRequest, AResponse aResponse) {
                   System.out.println("onResponse:" + aResponse.getData());
               }
      
               @Override
               public void onFailure(ARequest aRequest, AError aError) {
                   System.out.println("onFailure:" + aError.getCode() + aError.getMsg());
               }
           });
       }

      Debe modificar el código y especificar los parámetros según sus requisitos empresariales.

      Parámetro

      Ejemplo

      Descripción

      request.topic

      "/" + productKey + "/" + deviceName + "/user/devmsg"

      Topic personalizado sobre el cual el dispositivo tiene permiso de Publish.

      request.payloadObj

      "{\"temperature\":35.0, \"time\":\"sometime\"}"

      Contenido del mensaje.

      El servidor recibe el siguiente mensaje:

      Message
      {payload={"temperature":35.0, "time":"sometime"},
      topic='/a1uzcH0****/device1/user/devmsg',
      messageId='1131755639450642944',
      qos=0,
      generateTime=1558666546105}

Configuración del servidor para enviar un mensaje al dispositivo

La siguiente figura ilustra cómo el servidor envía un mensaje al dispositivo.

自定义Topic通信

  • Configure el SDK del dispositivo para suscribirse a un topic personalizado.

    Para obtener información sobre cómo configurar los parámetros de autenticación del dispositivo, inicializar la conexión y conectarse a IoT Platform, consulte el código de ejemplo en Configure the device to send a message to the server.

    Es necesario configurar el dispositivo para que se suscriba al topic personalizado.

    El siguiente código de ejemplo muestra cómo configurar el dispositivo para suscribirse a un topic:

    //Implement the callback function.
    @Override
    public void onInitDone(InitResult initResult) {
        //Specify the topic to which the device subscribes.
        MqttSubscribeRequest request = new MqttSubscribeRequest();
        request.topic = "/" + productKey + "/" + deviceName + "/user/cloudmsg";
        request.isSubscribe = true;
        //Send a subscription request and configure the callback functions that are invoked after the subscription succeeds or fails.
        LinkKit.getInstance().subscribe(request, new IConnectSubscribeListener() {
            @Override
            public void onSuccess() {
                System.out.println("");
            }
    
            @Override
            public void onFailure(AError aError) {
    
            }
        });
    
        //Configure a listener for downstream messages.
        IConnectNotifyListener notifyListener = new IConnectNotifyListener() {
            //Configure a callback function that is used after the downstream messages are received.
            @Override
            public void onNotify(String connectId, String topic, AMessage aMessage) {
                System.out.println(
                    "received message from " + topic + ":" + new String((byte[])aMessage.getData()));
            }
    
            @Override
            public boolean shouldHandle(String s, String s1) {
                return false;
            }
    
            @Override
            public void onConnectStateChange(String s, ConnectState connectState) {
    
            }
        };
        LinkKit.getInstance().registerOnNotifyListener(notifyListener);
    }

    Debe establecer request.topic en un topic personalizado sobre el cual el dispositivo tenga permiso de Subscribe.

  • Configure el SDK de la nube para invocar la operación Pub de IoT Platform y publicar mensajes. Para más información sobre los parámetros, consulte Pub. Para más detalles sobre el uso del SDK, consulte Use SDK for Java.

    • Configure los parámetros para autenticar el dispositivo.

       String regionId = "cn-shanghai";
       String accessKey = "LTAI****************";
       String accessSecret = "yourAccessKeySecret";
       final String productKey = "a1uzcH0****";
       final String deviceName = "device1";
       final String iotInstanceId = "iot-2w****";

      Debe configurar los parámetros descritos en la siguiente tabla según sus requisitos empresariales.

      Parámetro

      Ejemplo

      Descripción

      accessKey

      LTAIyourAccessKeySecretyourAccessKeySecret

      AccessKey ID y AccessKey Secret de su cuenta de Alibaba Cloud.

      Inicie sesión en la consola de IoT Platform, pase el puntero sobre la imagen de perfil y haga clic en AccessKey Management para obtener el AccessKey ID y el AccessKey Secret.

      Nota

      Si utiliza un usuario RAM, debe adjuntar la directiva de permisos AliyunIOTFullAccess al usuario RAM. Esta directiva permite al usuario RAM gestionar recursos de IoT Platform. Si no adjunta la directiva AliyunIOTFullAccess, la conexión a IoT Platform fallará. Para más información sobre cómo otorgar permisos a un usuario RAM, consulte RAM user access.

      accessSecret

      yourAccessKeySecret

      productKey

      a1uzcH0****

      Información del certificado del dispositivo. Puede consultar esta información en la página Device Details de la consola de IoT Platform.Para más información, consulte View device details.

      deviceName

      device1

      region

      cn-shanghai

      ID de la región donde se encuentra su dispositivo de IoT Platform. Para más información sobre los ID de región, consulte Regions and zones.

      iotInstanceId

      iot-2w****

      ID de la instancia a la que pertenece el dispositivo.

      Puede consultar el ID de la instancia en la página Overview de la consola de IoT Platform.

      • Si se muestra el ID de la instancia, debe especificar este parámetro.

      • Si no se genera ninguna página Overview ni ningún ID para su instancia, especifique una cadena vacía (iotInstanceId = "") para el parámetro.

    • Configure los parámetros de conexión.

      //Configure the client parameters.
      DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKey, accessSecret);
      IAcsClient client = new DefaultAcsClient(profile);
    • Configure los parámetros necesarios para publicar un mensaje.

      PubRequest request = new PubRequest();
      request.setIotInstanceId(iotInstanceId);
      request.setQos(0);
      //Specify the topic to which the message is published.
      request.setTopicFullName("/" + productKey + "/" + deviceName + "/user/cloudmsg");
      request.setProductKey(productKey);
      //Configure the MessageContent parameter. The message content must be encoded in Base64. Otherwise, the message content is displayed as garbled characters.
      request.setMessageContent(Base64.encode("{\"accuracy\":0.001,\"time\":now}"));

      Al invocar esta operación, debe configurar los parámetros según sus requisitos empresariales. Para más información, consulte Pub.

    • Envío de mensajes.

      try {
           PubResponse response = client.getAcsResponse(request);
           System.out.println("pub success?:" + response.getSuccess());
       } catch (Exception e) {
           System.out.println(e);
       }

      El dispositivo recibe el siguiente mensaje:

      msg = [{"accuracy":0.001,"time":now}]

Apéndice: Código de ejemplo

Importante

Debe modificar el código y especificar los parámetros según sus requisitos empresariales.

Descargar la demostración de Pub/Sub, que contiene el código de ejemplo para la configuración del SDK de la nube y del SDK del dispositivo en este caso.

Para obtener información sobre cómo conectar un cliente AMQP a IoT Platform, consulte los siguientes temas: