IoT Platform reenvía los datos enviados por los dispositivos a los topics de ApsaraMQ for RocketMQ. Posteriormente, ApsaraMQ for RocketMQ envía dichos datos a sus servidores empresariales. Este tema describe cómo configurar el reenvío de datos.
Requisitos previos
Se ha creado una cuenta de Alibaba Cloud.
-
IoT Platform está activado.
-
ApsaraMQ for RocketMQ está activado.
Si ApsaraMQ for RocketMQ no está activado, vaya a la página del producto ApsaraMQ for RocketMQ para activar el servicio.
-
Se ha preparado un entorno de desarrollo. En este ejemplo se utiliza un entorno de desarrollo Java compuesto por los siguientes elementos:
Sistema operativo: Windows 10 de 64 bits
Versión de JDK: JDK 8
Entorno de desarrollo integrado (IDE): IntelliJ IDEA Community Edition
Contexto
Proceso de reenvío de datos

Beneficios:
Al conectar dispositivos a IoT Platform mediante Message Queuing Telemetry Transport (MQTT), los enlaces de transmisión de datos utilizan cifrado Transport Layer Security (TLS) para evitar la manipulación de la información. Para obtener más detalles sobre MQTT, consulte MQTT protocol specifications.
ApsaraMQ for RocketMQ funciona como búfer de mensajes, lo que reduce las fluctuaciones de tráfico y la carga concurrente en sus servidores empresariales.
Procedimiento
-
Inicie sesión en la consola de IoT Platform y cree un producto y un dispositivo.
-
En la página Overview, haga clic en All environment. En la pestaña All environment, localice la instancia que desea gestionar y haga clic en su ID o nombre.
En este ejemplo se selecciona la región China (Shanghai).
-
En el panel de navegación izquierdo, seleccione . En la página Products, haga clic en Create Product. En la página Create Product, configure los parámetros y haga clic en OK.
En este ejemplo, el parámetro Product Name se establece en MQ_test y el parámetro Node Type en Directly Connected Device. Mantenga los valores predeterminados para el resto de los parámetros.
-
Haga clic en View Product Details. En la página de detalles del producto, seleccione y haga clic en Edit Topic Category para crear una categoría de topic destinada al envío de datos del dispositivo.
En este ejemplo se crea una categoría de topic denominada /{YourProductKey}/${YourDeviceName}/user/data.
-
En el panel de navegación izquierdo, seleccione . En la página Devices, haga clic en Add Device para crear un dispositivo asociado al producto MQ_test.
En este ejemplo se crea un dispositivo llamado MQdevice.
-
-
En la consola de ApsaraMQ for RocketMQ, cree un topic y un consumidor.
Inicie sesión en la consola de ApsaraMQ for RocketMQ.
-
En el panel de navegación izquierdo, haga clic en Instances. En la página Instances, haga clic en Create Instance. En este ejemplo se crea una instancia en la región China (Shanghai), con el parámetro Instance Version establecido en V4.0 y el parámetro Instance Type en Standard Edition Instance.
Para obtener más información, consulte Create an instance.
ImportanteLa instancia de ApsaraMQ for RocketMQ debe residir en la misma región que la instancia de IoT Platform.
Solo es posible reenviar flujos de datos a los topics de una instancia de ApsaraMQ for RocketMQ V4.x.
En la página Instances, localice la instancia para la cual desea crear una base de datos y haga clic en su nombre.
-
En la página Instance Details, haga clic en Create Group. En el panel Create Group, configure los parámetros y haga clic en OK.
Establezca Delivery Order en Concurrent Delivery y defina Description como
IoT device message subscription. -
Haga clic en Create Topic. En el panel Create Topic, establezca el parámetro Message Type en Normal Message.
Configure los siguientes parámetros:
Message Type: Normal Message
Description: IoT device reporting data to enterprise server
-
Cree un consumidor y verifique su estado en la consola de ApsaraMQ for RocketMQ. Asegúrese de que el consumidor se encuentre en estado Online y de que las suscripciones de los consumidores dentro del grupo sean consistentes.
En este ejemplo se emplea un SDK TCP para enviar y recibir mensajes. Para más información sobre cómo obtener y utilizar un SDK TCP, consulte Send and subscribe to normal messages with TCP client SDKs.
Código Java de ejemplo:
NotaPara consultar un AccessKey ID y un AccessKey secret, véase Create an AccessKey pair.
Para obtener más información sobre el uso de ApsaraMQ for RocketMQ, consulte la documentación de ApsaraMQ for RocketMQ.
import com.aliyun.openservices.ons.api.Action; import com.aliyun.openservices.ons.api.ConsumeContext; import com.aliyun.openservices.ons.api.Consumer; import com.aliyun.openservices.ons.api.Message; import com.aliyun.openservices.ons.api.MessageListener; import com.aliyun.openservices.ons.api.ONSFactory; import com.aliyun.openservices.ons.api.PropertyKeyConst; import java.util.Properties; public class ConsumerTest { public static void main(String[] args) { Properties properties = new Properties(); // The ID of the group that you created in the ApsaraMQ for RocketMQ console. properties.put(PropertyKeyConst.GROUP_ID, "XXX"); // The AccessKey ID that you created in the Alibaba Cloud Management Console for identity authentication. properties.put(PropertyKeyConst.AccessKey, "${AccessKey}"); // The AccessKey secret that you created in the Alibaba Cloud Management Console for identity authentication. properties.put(PropertyKeyConst.SecretKey, "${SecretKey}"); // The TCP endpoint. To obtain the TCP endpoint, go to the Basic Information section of the instance details page in the IoT Platform console. properties.put(PropertyKeyConst.NAMESRV_ADDR, "XXX"); // Clustering subscription. This is the default mode. // properties.put(PropertyKeyConst.MessageModel, PropertyValueConst.CLUSTERING); // Broadcasting subscription. // properties.put(PropertyKeyConst.MessageModel, PropertyValueConst.BROADCASTING); Consumer consumer = ONSFactory.createConsumer(properties); consumer.subscribe("iotx_test_mq", "", new MessageListener() { // Subscribe to multiple tags. public Action consume(Message message, ConsumeContext context) { System.out.println("Receive: " + message); return Action.CommitMessage; } }); consumer.start(); System.out.println("Consumer Started"); } }
-
En la consola de IoT Platform, configure una regla de reenvío de datos para la instancia con el fin de enviar la información del dispositivo hacia ApsaraMQ for RocketMQ.
En el panel de navegación izquierdo, seleccione .
-
En la página Data Forwarding, haga clic en Create Rule.
ImportanteSi aparece la página Data Forwarding de la versión más reciente, haga clic en Back to Previous Version en la esquina superior derecha. Una vez que se muestre la página Data Forwarding de la versión anterior, haga clic en Create Rule.
En el cuadro de diálogo Create Data Forwarding Rule, establezca el parámetro Rule Name en MQ forwarding y el parámetro Data Type en JSON. Luego, haga clic en OK.
-
En la página de detalles de la regla, haga clic en Write SQL Statement. En el cuadro de diálogo Write SQL Statement, configure los parámetros y haga clic en OK, tal como se muestra en la siguiente figura.

-
Haga clic en Add Operation. En el cuadro de diálogo Add Operation, especifique el destino al que desea reenviar los datos y haga clic en OK.
Configure los siguientes parámetros en el cuadro de diálogo:
Data Destination Name:
ToRocketMQSelect Operation: Send data to ApsaraMQ for RocketMQ
Region: China (Shanghai)
Instance:
IoT-forward-data-test
-
Vaya a la página Data Forwarding. Localice la regla MQ forwarding y haga clic en Start en la columna Actions.
Una vez habilitada la regla, IoT Platform reenviará los datos del dispositivo al topic de ApsaraMQ for RocketMQ.
-
Utilice un SDK de Java para simular un dispositivo, conéctelo a IoT Platform y úselo para enviar datos.
Descargue el paquete de demostración desde Download Java SDK Demo y descomprímalo.
Inicie IntelliJ IDEA e importe el proyecto de ejemplo denominado JavaLinkKitDemo incluido en el paquete de demostración.
Especifique la siguiente información del certificado del dispositivo MQdevice en el archivo
device_id.json: ProductKey, DeviceName y DeviceSecret.-
Modifique el topic MQTT en el archivo
src\main\java\com.aliyun.alink.devicesdk.demo\MqttSample.javapor el topic al que el dispositivo enviará los datos.En este ejemplo se utiliza el topic /{YourProductKey}/${YourDeviceName}/user/data.
/** * Example of a publish operation */ public void publish() { MqttPublishRequest request = new MqttPublishRequest(); // Specify a topic based on your business scenario. request.topic = "/" + productKey + "/" + deviceName + "/user/data"; ...... ...... } -
Cambie el endpoint MQTT en el archivo
src\main\java\com.aliyun.alink.devicesdk.demo\HelloWorld.javapor el endpoint MQTT correspondiente a su dispositivo.En este ejemplo se usa el siguiente endpoint MQTT. Para más información sobre cómo obtener endpoints MQTT, consulte View the endpoint of an instance.
public void init(final DeviceInfoData deviceInfoData) { ...... ...... /** * Configure the parameters for MQTT initialization. */ IoTMqttClientConfig config = new IoTMqttClientConfig(); config.productKey = deviceInfoData.productKey; config.deviceName = deviceInfoData.deviceName; config.deviceSecret = deviceInfoData.deviceSecret; config.channelHost = "iot-06****.mqtt.iothub.aliyuncs.com:1883"; ...... ...... } Ejecute el archivo
src\main\java\com.aliyun.alink.devicesdk.demo\HelloWorld.javapara iniciar el dispositivo.
En la consola de IoT Platform, vaya a la página Instance Details de la instancia y seleccione . Allí podrá consultar los registros del dispositivo y comprobar si los datos se han reenviado correctamente a ApsaraMQ for RocketMQ.

-
Consulte los datos en la consola de ApsaraMQ for RocketMQ.
-
Ejecute el código en su servidor local para suscribirse al topic de ApsaraMQ for RocketMQ.

-
Vaya a la página instance details en la consola de ApsaraMQ for RocketMQ y haga clic en Message Query. En la página Message Query, busque mensajes por topic o por ID de mensaje.
Puede hacer clic en Details para ver la información detallada del mensaje reenviado a ApsaraMQ for RocketMQ y descargarlo.
Mensaje de ejemplo:
{"deviceName":"MQdevice"}
-