Este tema describe cómo conectar un cliente de Java Message Service (JMS) que utiliza el protocolo Advanced Message Queuing Protocol (AMQP) a Alibaba Cloud IoT Platform y recibir mensajes de IoT Platform mediante la función de suscripción del lado del servidor.
Requisitos previos
Debe obtener el ID del grupo de consumidores que se suscribe a los mensajes de un topic.
Puede utilizar el grupo de consumidores predeterminado llamado DEFAULT_GROUP o crear un grupo de consumidores en la consola de IoT Platform. Para obtener más información, consulte Manage consumer groups.
Puede usar un grupo de consumidores para suscribirse a los mensajes de un topic. Para obtener más información, consulte Configure AMQP server-side subscription.
Entorno de desarrollo
En este ejemplo, el entorno de desarrollo consta de los siguientes componentes:
Sistema operativo: Windows 10
Java Development Kit (JDK): JDK 8
Entorno de desarrollo integrado (IDE): IntelliJ IDEA Community Edition
Descarga del cliente Apache Qpid JMS
Para descargar el cliente y consultar las instrucciones, visite Qpid JMS 0.57.0.
En este ejemplo, se agregan las siguientes dependencias a un proyecto Maven para descargar el cliente Qpid JMS:
<!-- amqp 1.0 qpid client -->
<dependency>
<groupId>org.apache.qpid</groupId>
<artifactId>qpid-jms-client</artifactId>
<version>0.57.0</version>
</dependency>
<!-- util for base64-->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
Demostración
Puede utilizar un cliente AMQP para recibir mensajes de IoT Platform mediante una cuenta de Alibaba Cloud o un usuario RAM. Por ejemplo, la Empresa A tiene una cuenta de Alibaba Cloud llamada Cuenta A y la Empresa B tiene una cuenta de Alibaba Cloud llamada Cuenta B. La Empresa A ha configurado una suscripción del lado del servidor en la consola de IoT Platform mediante la Cuenta A.
-
Utilice la Cuenta A o su usuario de Resource Access Management (RAM) al que se le hayan otorgado permisos directamente
NotaPara un usuario RAM autorizado directamente, debe otorgarle el permiso para usar la función de suscripción del lado del servidor AMQP (iot:sub). De lo contrario, la conexión fallará. Para obtener más información sobre cómo otorgar permisos, consulte RAM authorization for IoT Platform.
Para mejorar la seguridad de los datos, se recomienda otorgar permisos de operación específicos a los usuarios RAM mediante roles RAM. Para obtener más información, consulte la siguiente sección.
Para obtener más información, consulte la sección Receive server-side subscription messages within the current account de este tema.
-
Utilice un usuario RAM que asuma un rol RAM
El usuario RAM que utilice puede pertenecer a la Cuenta A o a la Cuenta B. Puede usar el usuario RAM para conectar un cliente AMQP a IoT Platform activado dentro de la Cuenta A. De esta manera, podrá recibir mensajes de dispositivos mediante la función de suscripción del lado del servidor.
Para obtener más información, consulte la sección Receive server-side subscription messages as a RAM user that assumes a RAM role de este tema.
Recepción de mensajes de suscripción del lado del servidor dentro de la cuenta actual
Descargue el paquete de demostración y descomprímalo.
-
Abra IntelliJ IDEA e importe el proyecto de muestra amqp-demo-en incluido en el paquete de demostración.
En el archivo
pom.xml, se han agregado las dependencias de Maven para descargar el cliente Qpid JMS. -
En el archivo
AmqpClient.javaubicado en el directoriosrc/main/java/com.aliyun.iotx.demo, especifique los parámetros de conexión AMQP descritos en la siguiente tabla.ImportanteAsegúrese de especificar valores de parámetros válidos. De lo contrario, el cliente AMQP no podrá conectarse a IoT Platform.
En este ejemplo, se agrega el fragmento de código
Thread.sleep(60 * 1000);para finalizar el programa 1 minuto después de su inicio y ejecución. Puede especificar la duración según sus requisitos comerciales.
Para obtener más información, consulte Connect an AMQP client to IoT Platform.
Parámetro
Descripción
accessKey
El AccessKey ID y el AccessKey secret de la cuenta de Alibaba Cloud o de su usuario RAM.
Inicie sesión en la consola de IoT Platform, pase el puntero sobre la imagen de perfil en la esquina superior derecha y luego haga clic en AccessKey Management para obtener el AccessKey ID y el AccessKey secret.
accessSecret
consumerGroupId
El ID del grupo de consumidores en la instancia de IoT Platform.
Inicie sesión en la consola de IoT Platform. En la instancia correspondiente, vaya a para ver su ID de grupo de consumidores.
iotInstanceId
El ID de la instancia de IoT Platform. Puede ver el ID de la instancia en la pestaña Overview de la consola de IoT Platform.
Si se muestra el ID de la instancia, debe establecer este parámetro con dicho ID.
Si la pestaña Overview no se muestra o su instancia no tiene un ID, deje este parámetro vacío con el formato
iotInstanceId = "".
clientId
El ID del cliente. Debe definir este ID. El ID puede tener hasta 64 caracteres de longitud. Se recomienda utilizar un identificador único, como el UUID, la dirección MAC o la dirección IP del servidor donde se encuentra su cliente AMQP.
Una vez que el cliente AMQP esté conectado e iniciado, inicie sesión en la consola de IoT Platform. En la pestaña Consumer Groups de la página de la instancia, haga clic en View junto al grupo de consumidores. La página Consumer Group Details muestra este parámetro. Esto le ayuda a identificar los diferentes clientes.
connectionCount
El número de conexiones habilitadas en el cliente AMQP. Valor máximo: 128. Este parámetro se utiliza para el escalado horizontal en escenarios de envío de mensajes en tiempo real.
En la página Consumer Group Details, cada cliente conectado se muestra como
${clientId}+"-"+ Number. El número mínimo es 0.host
El endpoint que utiliza el cliente AMQP para conectarse a IoT Platform.
Para obtener más información sobre el endpoint que puede especificar para la variable
${YourHost}, consulte Manage instance endpoints. -
Ejecute el programa
AmqpClient.java.-
Si se muestra información similar a la siguiente salida, el cliente AMQP está conectado a IoT Platform y puede recibir mensajes:
topic = /***********/******/thing/event/property/post, message = 2**************7, content = {"temperature":29,"humidity":29,"time":1617357297270}Parámetro
Descripción
topic
El topic que se utiliza para enviar propiedades del dispositivo.
messageId
El ID del mensaje.
content
El contenido del mensaje.
-
Si ocurre un error en el código o en el entorno de red, el cliente AMQP no podrá conectarse a IoT Platform.
Utilice el registro de errores para comprobar su código y la configuración de red. Resuelva el problema y ejecute el código nuevamente.
-
Recepción de mensajes de suscripción del lado del servidor como usuario RAM que asume un rol RAM
Requisitos previos
Al usuario RAM se le ha asignado el rol RAM para acceder a los recursos de suscripción del lado del servidor de IoT Platform que pertenecen a la Cuenta A. Para obtener más información, consulte Authorize a RAM user of the current Alibaba Cloud account to use server-side subscription y Authorize a RAM user of another account to use server-side subscription.
Procedimiento
Descargue el paquete de demostración y descomprímalo.
-
Abra IntelliJ IDEA e importe el proyecto de muestra amqp-sts-demo incluido en el paquete de demostración.
En el archivo
pom.xml, se han agregado las dependencias de Maven para descargar el cliente Qpid JMS. -
En el archivo
AmqpStsTokenClient.javaubicado en el directoriosrc/main/java/com/aliyun/iotx/demo, especifique los parámetros de conexión AMQP descritos en la siguiente tabla.ImportanteAsegúrese de especificar valores de parámetros válidos. De lo contrario, el cliente AMQP no podrá conectarse a IoT Platform.
Un token de Security Token Service (STS) tiene una validez máxima de 1 hora. Debe actualizar los parámetros de conexión AMQP periódicamente para garantizar que el cliente AMQP pueda reconectarse a IoT Platform según lo esperado. Para obtener más información, consulte la sección
scheduledExecutorService.scheduleAtFixedRateen el código de demostración.En este ejemplo, se agrega el fragmento de código
Thread.sleep(6000 * 1000);para finalizar el programa 1 minuto después de su inicio y ejecución. Puede especificar la duración según sus requisitos comerciales.
Para obtener más información, consulte Connect an AMQP client to IoT Platform.
Parámetro
Descripción
CONNECTION_COUNT
El número de conexiones habilitadas en el cliente AMQP. Valor máximo: 128. Este parámetro se utiliza para el escalado horizontal en escenarios de envío de mensajes en tiempo real.
En la página Consumer Group Details de la consola de IoT Platform, cada cliente conectado se muestra como
"clientId-"+ Number. El número mínimo es 0.DURATION_SECONDS
El periodo de validez del token STS. El periodo de validez no puede exceder 1 hora. Valores válidos: de 15 a 60. Unidad: minutos.
STS_ENDPOINT
El endpoint que se utiliza para obtener el token STS. Para obtener más información, consulte Endpoints.
STS_ACCESS_KEY
El AccessKey ID y el AccessKey secret del usuario RAM que asume el rol RAM de la Cuenta A.
STS_ACCESS_SECRET
STS_ROLE_ARN
El Alibaba Cloud Resource Name (ARN) del rol RAM que se va a asumir. Formato:
acs:ram::<account-id>:role/<role-name>.<role-name>es el nombre del rol RAM en minúsculas. Después de crear un rol RAM, puede hacer clic en el nombre del rol para ver el ARN en la sección Basic Information.CONSUMER_GROUP_ID
El ID del grupo de consumidores que se suscribe a los mensajes de suscripción del lado del servidor.
Para ver el ID del grupo de consumidores, realice los siguientes pasos: Inicie sesión en la consola de IoT Platform y haga clic en la tarjeta de la instancia que desea gestionar. En el panel de navegación izquierdo, elija . El ID se muestra en la pestaña Consumer Groups.
IOT_INSTANCE_ID
El ID de la instancia de IoT Platform dentro de la Cuenta A.
Puede iniciar sesión en la consola de IoT Platform y ver el ID de la instancia en la pestaña Overview.
Si se muestra el ID de la instancia, debe establecer este parámetro con dicho ID.
Si la pestaña Overview no se muestra o su instancia no tiene un ID, deje este parámetro vacío con el formato
IOT_INSTANCE_ID = "".
HOST
El endpoint que utiliza el cliente AMQP para conectarse a la instancia de IoT Platform dentro de la Cuenta A. Para obtener más información, consulte Manage instance endpoints.
-
Ejecute el programa
AmqpStsTokenClient.java.-
Si se muestra información similar a la siguiente salida, el cliente AMQP está conectado a IoT Platform y puede recibir mensajes:
topic = /***********/******/thing/event/property/post, message = 2**************7, content = {"temperature":29,"humidity":29,"time":1617357297270}Parámetro
Descripción
topic
El topic que se utiliza para enviar propiedades del dispositivo.
messageId
El ID del mensaje.
content
El contenido del mensaje.
-
Si ocurre un error en el código o en el entorno de red, el cliente AMQP no podrá conectarse a IoT Platform.
Utilice el registro de errores para comprobar su código y la configuración de red. Resuelva el problema y ejecute el código nuevamente.
-
Referencias
Para obtener más información sobre los códigos de error relacionados con la función de suscripción del lado del servidor, consulte la sección Error codes that are related to messages del tema "Registros de IoT Platform".