MQTT - AWS IoT Core

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

MQTT

MQTT (Transporte de telemetría de colas de mensajes) es un protocolo de mensajería ligero y ampliamente adoptado que está diseñado para dispositivos restringidos. La compatibilidad de AWS IoT Core con MQTT se basa en la especificación MQTT v3.1.1 y en la especificación MQTT v5.0, con algunas diferencias, tal y como se documenta en AWS IoT diferencias con las especificaciones de MQTT. Al ser la última versión del estándar, MQTT 5 presenta varias características clave que hacen que un sistema basado en MQTT sea más robusto, incluidas nuevas mejoras de escalabilidad, informes de errores mejorados con respuestas de códigos de motivo, temporizadores de caducidad de mensajes, y sesiones y encabezados de mensajes de usuario personalizados. Para obtener más información sobre las funciones compatibles con MQTT 5, consulte Funciones AWS IoT Core compatibles con MQTT 5. AWS IoT Core también admite la comunicación entre versiones de MQTT (MQTT 3 y MQTT 5). Un editor de MQTT 3 puede enviar un mensaje de MQTT 3 a un suscriptor de MQTT 5 que recibirá un mensaje de publicación de MQTT 5, y viceversa.

AWS IoT Core admite conexiones de dispositivos que utilizan el protocolo MQTT y el protocolo MQTT sobre el protocolo WSS y que se identifican mediante un ID de cliente. AWS IoT SDK de dispositivo es compatible con ambos protocolos y son las formas recomendadas de conectar los dispositivos a AWS IoT Core. Los SDK de AWS IoT dispositivos admiten las funciones necesarias para que los dispositivos y los clientes se conecten a los servicios y accedan a ellos. AWS IoT Los SDK de dispositivos admiten los protocolos de autenticación que requieren los AWS IoT servicios y los requisitos de identificación de conexión que requieren el protocolo MQTT y los protocolos MQTT sobre WSS. Para obtener información sobre cómo conectarse AWS IoT mediante los SDK de AWS dispositivos y enlaces a ejemplos AWS IoT en los idiomas compatibles, consulte. Conexión con MQTT mediante los SDK del dispositivo AWS IoT Para obtener más información acerca de los métodos de autenticación y las asignaciones de puertos para mensajes MQTT, consulte Protocolos, asignaciones de puertos y autenticación.

Si bien recomendamos usar los SDK del AWS IoT dispositivo para conectarse AWS IoT, no son obligatorios. Sin embargo, si no utilizas los SDK del AWS IoT dispositivo, debes proporcionar la seguridad de conexión y comunicación necesaria. Los clientes también deben enviar la extensión TLS de Indicación de nombre de servidor (SNI) en la solicitud de conexión. Se rechazan los intentos de conexión que no incluyan la SNI. Para obtener más información, consulte Seguridad en el transporte en AWS IoT. Los clientes que utilizan usuarios y AWS credenciales de IAM para autenticar a los clientes deben proporcionar la autenticación correcta de la versión 4 de Signature.

Conexión con MQTT mediante los SDK del dispositivo AWS IoT

Esta sección contiene enlaces a los SDK de AWS IoT dispositivos y al código fuente de programas de muestra que ilustran cómo conectar un dispositivo a ellos. AWS IoT Las aplicaciones de muestra enlazadas aquí muestran cómo conectarse AWS IoT mediante el protocolo MQTT y MQTT a través de WSS.

nota

Los SDK de AWS IoT dispositivos han lanzado un cliente MQTT 5.

C++

Uso del SDK de dispositivos de AWS IoT C++ para conectar dispositivos

Python

Uso del SDK de AWS IoT dispositivos para Python para conectar dispositivos

JavaScript

Uso del SDK de AWS IoT dispositivos JavaScript para conectar dispositivos

Java

Uso del AWS IoT Device SDK for Java para conectar dispositivos

nota

El AWS IoT Device SDK for Java v2 ahora es compatible con el desarrollo de Android. Para obtener más información, consulta AWS IoT Device SDK for Android.

Embedded C

Uso del SDK de AWS IoT dispositivos para C integrado para conectar dispositivos

importante

Este SDK está diseñado para que lo utilicen desarrolladores de software incrustado con experiencia.

Opciones de calidad de servicio (QoS) de MQTT

AWS IoT y los SDK de AWS IoT dispositivos admiten los niveles de calidad de servicio (QoS) de MQTT y. 0 1 El protocolo MQTT define un tercer nivel de QoS, el 2 nivel, AWS IoT pero no lo admite. Solo el protocolo MQTT admite la característica QoS. HTTPS admite QoS al pasar un parámetro de cadena de consulta ?qos=qos donde el valor puede ser 0 o 1.

En esta tabla se describe cómo afecta cada nivel de QoS a los mensajes publicados en el agente de mensajes y por este.

Con un nivel de QoS de...

El mensaje es…

Comentarios

QoS nivel 0

Enviado cero o más veces

Este nivel debe usarse para los mensajes que se envían a través de enlaces de comunicación fiables o que pueden perderse sin problemas.

QoS nivel 1

Se envía al menos una vez y, a continuación, varias veces hasta recibir una respuesta PUBACK

El mensaje no se considera completo hasta que el remitente reciba una respuesta PUBACK que indique que se ha entregado correctamente.

Sesiones persistentes de MQTT

Las sesiones persistentes almacenan las suscripciones y los mensajes de un cliente, con una calidad de servicio (QoS) de 1, que el cliente no ha reconocido. Cuando el dispositivo se vuelve a conectar a una sesión persistente, la sesión se reanuda, las suscripciones se restablecen y los mensajes suscritos no confirmados recibidos y almacenados antes de la reconexión se envían al cliente.

El procesamiento de los mensajes almacenados se registra en y se registra. CloudWatch CloudWatch Para obtener información sobre las entradas escritas CloudWatch y los CloudWatch registros, consulte Métricas del agente de mensajes yEntrada de registro en cola.

Creación de una sesión persistente

En MQTT 3, puede crear una sesión persistente de MQTT enviando un mensaje CONNECT, que establezca la marca cleanSession en 0. Si no existe ninguna sesión para el cliente que envía el mensaje CONNECT, se crea una sesión persistente nueva. Si ya existe una sesión para el cliente, el cliente reanuda la sesión existente. Para crear una sesión limpia, se envía un mensaje CONNECT y se establece la marca cleanSession en 1, y el agente no almacenará ningún estado de la sesión cuando el cliente se desconecte.

En MQTT 5, las sesiones persistentes se gestionan configurando la marca Clean Start y Session Expiry Interval. Clean Start controla el inicio de la sesión de conexión y el final de la sesión anterior. Si se establece Clean Start = 1, se crea una nueva sesión y, si existe, se termina la sesión anterior. Si se establece Clean Start = 0, la sesión de conexión reanuda la sesión anterior, si ya existe. El intervalo de caducidad de la sesión controla el final de la sesión de conexión. El intervalo de caducidad de la sesión especifica el tiempo, en segundos (entero de 4 bytes), que durará una sesión tras la desconexión. La configuración Session Expiry interval = 0 hace que la sesión finalice inmediatamente después de la desconexión. Si el intervalo de caducidad de la sesión no se especifica en el mensaje CONNECT, el valor predeterminado es 0.

Inicio limpio y caducidad de la sesión de MQTT 5
Valor de la propiedad Descripción
Clean Start= 1 Crea una nueva sesión y termina una sesión anterior, si existe.
Clean Start= 0 Reanuda una sesión si existe una sesión anterior.
Session Expiry Interval> 0 Persiste una sesión.
Session Expiry interval= 0 No persiste una sesión.

En MQTT 5, si establece Clean Start = 1 y Session Expiry Interval =0, equivale a una sesión limpia de MQTT 3. Si establece Clean Start = 0 y Session Expiry Interval >0, equivale a una sesión persistente de MQTT 3.

nota

No se admiten sesiones persistentes entre versiones MQTT (MQTT 3 y MQTT 5). Una sesión persistente de MQTT 3 no se puede reanudar como una sesión de MQTT 5 y viceversa.

Operaciones durante una sesión persistente

Los clientes utilizan el atributo sessionPresent del mensaje de confirmación de conexión (CONNACK) para determinar si existe una sesión persistente. Si sessionPresent es 1, hay una sesión persistente y todos los mensajes almacenados para el cliente se envían al cliente después de que el cliente reciba el CONNACK, tal y como se describe en Tráfico de mensajes tras la reconexión a una sesión persistente. Si sessionPresent es 1, el cliente no necesita volver a suscribirse. Sin embargo, si sessionPresent está establecido en 0, significa que no existe ninguna sesión persistente y que el cliente debe volver a suscribirse a sus filtros de temas.

Una vez que el cliente se une a una sesión persistente, puede publicar mensajes y suscribirse a filtros de temas sin ningún indicador adicional en cada operación.

Tráfico de mensajes tras volver a conectarse a una sesión persistente

Una sesión persistente representa una conexión en curso entre un cliente y un agente de mensajes de MQTT. Cuando un cliente se conecta al agente de mensajes mediante una sesión persistente, el agente de mensajes guarda todas las suscripciones que el cliente realiza durante la conexión. Cuando el cliente se desconecta, el agente de mensajes almacena los mensajes QoS 1 sin confirmar y los mensajes QoS 1 nuevos publicados en los temas a los que el cliente está suscrito. Los mensajes se almacenan según el límite de la cuenta. Mensajes que superen el límite se eliminarán. Para más información acerca de los límites de mensajes persistentes, consulte Puntos de conexión y cuotas de AWS IoT Core. Cuando el cliente vuelve a conectarse la sesión persistente, todas las suscripciones se restablecen y todos los mensajes almacenados se envían al cliente a una velocidad máxima de 10 mensajes por segundo. En MQTT 5, si un QoS1 saliente con un intervalo de caducidad de mensajes caduca cuando un cliente está desconectado, una vez que se reanude la conexión, el cliente no recibirá el mensaje caducado.

Tras la reconexión, los mensajes almacenados se envían al cliente a una velocidad limitada a 10 mensajes almacenados por segundo, junto con el tráfico de mensajes actual hasta que se alcance el límite de Publish requests per second per connection. Como la velocidad de entrega de los mensajes almacenados es limitada, se tardarán varios segundos en entregar todos los mensajes almacenados si una sesión tiene más de 10 mensajes almacenados que entregar después de la reconexión.

Finalizar una sesión persistente

Las sesiones persistentes pueden finalizar de una de las siguientes formas:

  • Transcurre el tiempo de caducidad de la sesión persistente. El temporizador de caducidad de la sesión persistente se inicia cuando el agente de mensajes detecta que un cliente se ha desconectado, ya sea porque el cliente se ha desconectado o porque se ha agotado el tiempo de espera de la conexión.

  • El cliente envía un mensaje CONNECT en el que se establece la marca cleanSession en 1.

En MQTT 3, el valor predeterminado del tiempo de caducidad de las sesiones persistentes es de una hora, y esto se aplica a todas las sesiones de la cuenta.

En MQTT 5, puede establecer el intervalo de caducidad de la sesión para cada sesión en los paquetes CONNECT y DISCONNECT.

Para el intervalo de caducidad de la sesión en el paquete DISCONNECT:

  • Si la sesión actual tiene un intervalo de caducidad de sesión igual a 0, no puede establecer el intervalo de caducidad de la sesión en un valor superior a 0 en el paquete DISCONNECT.

  • Si la sesión actual tiene un intervalo de caducidad de sesión superior a 0 y se establece el intervalo de caducidad de la sesión en 0 en el paquete DISCONNECT, la sesión finalizará en DISCONNECT.

  • De lo contrario, el intervalo de caducidad de la sesión del paquete DISCONNECT actualizará el intervalo de caducidad de la sesión actual.

nota

Los mensajes guardados en espera de ser enviados al cliente al finalizar la sesión se descartan; sin embargo, se siguen facturando según la tarifa de mensajería estándar, aunque no se hayan podido enviar. Para obtener más información sobre los precios de los mensajes, consulte Precios de AWS IoT Core. Puede configurar el intervalo de tiempo de caducidad.

Reconexión después de que haya caducado una sesión persistente

Si un cliente no se vuelve a conectar a su sesión persistente antes de que caduque, la sesión finaliza y los mensajes almacenados se descartan. Cuando un cliente se vuelve a conectar después de que la sesión haya caducado con una marca cleanSession establecida en 0, el servicio crea una nueva sesión persistente. Las suscripciones o los mensajes de la sesión anterior no están disponibles para esta sesión porque se descartaron al expirar la sesión anterior.

Cargos por mensajes de sesión persistentes

Los mensajes se cobran Cuenta de AWS cuando el agente de mensajes envía un mensaje a un cliente o a una sesión persistente fuera de línea. Cuando un dispositivo desconectado con una sesión persistente se vuelve a conectar y reanuda la sesión, los mensajes almacenados se envían al dispositivo y se vuelven a cargar a su cuenta. Para obtener más información sobre los precios de los mensajes, consulte los Precios de AWS IoT Core : Mensajería.

El tiempo de caducidad predeterminado de la sesión persistente, de una hora, se puede aumentar mediante el proceso de aumento de límites estándar. Tenga en cuenta que aumentar el tiempo de caducidad de la sesión puede aumentar los cargos por mensajes, ya que el tiempo adicional podría permitir almacenar más mensajes para el dispositivo sin conexión y esos mensajes adicionales se cargarían en su cuenta según la tarifa de mensajería estándar. El tiempo de caducidad de la sesión es aproximado y una sesión puede prolongarse hasta 30 minutos más que el límite de la cuenta; sin embargo, una sesión no superará el límite de la cuenta. Para obtener más información acerca de los límites de sesión, consulte Cuotas de servicio de AWS.

Mensajes retenidos de MQTT

AWS IoT Core admite el indicador RETAIN descrito en el protocolo MQTT. Cuando un cliente establece el indicador RETAIN en un mensaje MQTT que publica, AWS IoT Core guarda el mensaje. A continuación, puede enviarse a los nuevos suscriptores, recuperarse mediante una llamada a la operación GetRetainedMessage y visualizarse en la consola de AWS IoT.

Ejemplos del uso de mensajes retenidos en MQTT
  • Como mensaje de configuración inicial

    Los mensajes retenidos de MQTT se envían a un cliente después de que el cliente se suscriba a un tema. Si desea que todos los clientes que se suscriban a un tema reciban el mensaje retenido de MQTT inmediatamente después de su suscripción, puede publicar un mensaje de configuración con el indicador RETAIN activado. Los clientes que se suscriben también reciben actualizaciones de esa configuración cada vez que se publica un mensaje de configuración nuevo.

  • Como último mensaje de estado conocido

    Los dispositivos pueden configurar la marca RETAIN en los mensajes en estado actual para que AWS IoT Core los guarde. Cuando las aplicaciones se conectan o se vuelven a conectar, pueden suscribirse a este tema y obtener el último estado registrado inmediatamente después de suscribirse al tema del mensaje retenido. De esta forma, pueden evitar tener que esperar hasta el siguiente mensaje del dispositivo para ver el estado actual.

Las tareas habituales con mensajes MQTT retenidos en AWS IoT Core

AWS IoT Core guarda los mensajes MQTT con el indicador RETAIN activado. Estos mensajes retenidos se envían a todos los clientes que se han suscrito al tema, como un mensaje MQTT normal, y también se almacenan para enviarlos a los nuevos suscriptores del tema.

Los mensajes MQTT retenidos requieren políticas específicas para autorizar a los clientes a acceder a ellos. Para ver ejemplos del uso de políticas de mensajes retenidos, consulte Ejemplos de políticas de mensajes retenidos.

En esta sección se describen las operaciones comunes que implican los mensajes retenidos.

  • Creación de mensajes retenidos

    El cliente determina si un mensaje se conserva cuando publica un mensaje MQTT. Los clientes pueden establecer la marca RETAIN al publicar un mensaje mediante un SDK de dispositivo. Las aplicaciones y los servicios pueden establecer la marca RETAIN cuando utilizan la acción Publish para publicar un mensaje MQTT.

    Solo se conserva un mensaje por nombre de tema. Un mensaje nuevo con la marca RETAIN activada y publicada en un tema reemplaza cualquier mensaje retenido existente que se haya enviado anteriormente al tema.

    NOTA: No puede publicar en un tema reservado con la marca RETAIN activada.

  • Suscripción a un tema de mensajes retenido

    Los clientes se suscriben a los temas de mensajes retenidos como lo harían con cualquier otro tema de mensajes MQTT. Los mensajes retenidos que se reciben al suscribirse a un tema de mensajes retenidos tienen la marca RETAIN activada.

    Los mensajes retenidos se eliminan AWS IoT Core cuando un cliente publica un mensaje retenido con una carga útil de 0 bytes en el tema del mensaje retenido. Los clientes que se hayan suscrito al tema del mensaje retenido también recibirán el mensaje de 0 bytes.

    Si se suscribe a un filtro de temas con formato comodín que incluye un tema de mensaje retenido, el cliente puede recibir los mensajes subsiguientes publicados en el tema del mensaje retenido, pero no entrega el mensaje retenido al suscribirse.

    NOTA: Para recibir un mensaje retenido al suscribirse, el filtro de temas de la solicitud de suscripción debe coincidir exactamente con el tema del mensaje retenido.

    Los mensajes retenidos que se reciben al suscribirse a un tema de mensajes retenidos tienen la marca RETAIN activada. Los mensajes retenidos que recibe un cliente suscriptor después de la suscripción, no lo hacen.

  • Recuperación de un mensaje retenido

    Los mensajes retenidos se entregan a los clientes automáticamente cuando se suscriben al tema que contiene el mensaje retenido. Para que un cliente reciba el mensaje retenido al suscribirse, debe suscribirse al nombre exacto del tema del mensaje retenido. Si se suscribe a un filtro de temas con formato comodín que incluye un tema de mensaje retenido, el cliente puede recibir los mensajes posteriores publicados en el tema del mensaje retenido, pero no entrega el mensaje retenido al suscribirse.

    Los servicios y las aplicaciones pueden enumerar y recuperar los mensajes retenidos llamando a ListRetainedMessages y GetRetainedMessage.

    No se impide que un cliente publique mensajes en un tema de mensaje retenido sin configurar la marca RETAIN. Esto podría provocar resultados inesperados, como que el mensaje retenido no coincida con el mensaje recibido al suscribirse al tema.

    Con MQTT 5, si un mensaje retenido tiene establecido el intervalo de caducidad del mensaje y el mensaje retenido caduca, el nuevo suscriptor que se suscriba a ese tema no recibirá el mensaje retenido si se suscribe correctamente.

  • Generación de una lista con los temas de los mensajes retenidos

    Puede generar una lista de los mensajes retenidos llamando a ListRetainedMessages y los mensajes retenidos se pueden ver en la consola de AWS IoT.

  • Obtención de los detalles de los mensajes retenidos

    Puede obtener los detalles de los mensajes retenidos llamando a GetRetainedMessage y los puede ver en la consola de AWS IoT.

  • Retención de un mensaje Will

    Los mensajes Will de MQTT que se crean cuando se conecta un dispositivo se pueden conservar configurando la marca Will Retain en el campo Connect Flag bits.

  • Eliminación de mensajes retenidos

    Los dispositivos, las aplicaciones y los servicios pueden eliminar un mensaje retenido publicando un mensaje con la marca RETAIN activada y una carga de mensaje vacía (0 bytes) junto al nombre del tema del mensaje retenido que se va a eliminar. Estos mensajes eliminan el mensaje retenido AWS IoT Core y se envían a los clientes con una suscripción al tema, pero no se conservan. AWS IoT Core

    Los mensajes retenidos también se pueden eliminar de forma interactiva accediendo al mensaje retenido en la consola de AWS IoT. Los mensajes retenidos que se eliminan mediante la consola de AWS IoT también envían un mensaje de 0 bytes a los clientes que se hayan suscrito al tema del mensaje retenido.

    Los mensajes retenidos no se pueden restaurar una vez eliminados. Un cliente tendría que publicar un nuevo mensaje retenido para sustituir al mensaje eliminado.

  • Depuración y solución de problemas de los mensajes retenidos

    La consola de AWS IoT proporciona varias herramientas para ayudarle a solucionar los problemas de los mensajes retenidos:

    • La página de mensajes retenidos

      La página de mensajes retenidos de la consola de AWS IoT proporciona una lista paginada de los mensajes retenidos que su cuenta ha almacenado en la región actual. En esta página puede hacer lo siguiente:

      • Consulte los detalles de cada mensaje retenido, como la carga del mensaje, la QoS y la hora en que se recibió.

      • Actualice el contenido de un mensaje retenido.

      • Elimine un mensaje retenido.

    • El cliente de pruebas MQTT

      La página del cliente de pruebas de MQTT de la consola de AWS IoT permite suscribirse a temas de MQTT y publicarlos. La opción de publicación le permite establecer la marca RETAIN en los mensajes que publique para simular el comportamiento de sus dispositivos.

    Algunos resultados inesperados pueden deberse a estos aspectos de la forma en que se implementan los mensajes retenidos en AWS IoT Core.

    • Límites de mensajes retenidos

      Cuando una cuenta ha almacenado el número máximo de mensajes retenidos, AWS IoT Core devuelve una respuesta limitada a los mensajes publicados con el comando RETAIN activado y con cargas útiles superiores a 0 bytes, hasta que se eliminen algunos mensajes retenidos y el recuento de mensajes retenidos caiga por debajo del límite.

    • Pedido de entrega de mensajes retenidos

      No se garantiza la secuencia de entrega de mensajes retenidos y mensajes suscritos.

Facturación y mensajes retenidos

La publicación de mensajes con la marca RETAIN activada desde un cliente, mediante la consola de AWS IoT o mediante una llamada a Publish conlleva los gastos de mensajería adicionales descritos en la sección Precios de mensajería de AWS IoT Core.

La recuperación de los mensajes retenidos por parte de un cliente, mediante una AWS IoT consola o mediante una llamada GetRetainedMessageconlleva gastos de mensajería además de los cargos por uso normal de la API. Los cargos adicionales se describen en Precios de mensajería de AWS IoT Core.

Los mensajes Will que se publiquen cuando un dispositivo se desconecte inesperadamente incurrirán en los cargos de mensajería descritos en el apartado Precios de mensajería de AWS IoT Core.

Para obtener más información sobre los costes de mensajería, consulte Precios de mensajería de AWS IoT Core.

Comparación de los mensajes retenidos de MQTT y las sesiones persistentes de MQTT

Los mensajes retenidos y las sesiones persistentes son características estándar de MQTT que permiten a los dispositivos recibir los mensajes que se publicaron sin conexión a Internet. Los mensajes retenidos se pueden publicar desde sesiones persistentes. En esta sección se describen los aspectos clave de estas características y la forma en que funcionan juntas.

Mensajes retenidos

Sesiones persistentes

Características principales

Los mensajes retenidos se pueden usar para configurar grandes grupos de dispositivos después de que se conecten o enviarles notificaciones.

Los mensajes retenidos también se pueden usar cuando desee que los dispositivos reciban solo el último mensaje publicado en un tema tras una reconexión.

Las sesiones persistentes son útiles para los dispositivos que tienen una conectividad intermitente y pueden pasar por alto varios mensajes importantes.

Los dispositivos se pueden conectar con una sesión persistente para recibir los mensajes enviados mientras están desconectados.

Ejemplos

Los mensajes retenidos pueden proporcionar a los dispositivos información de configuración sobre su entorno cuando se conectan a Internet. La configuración inicial podría incluir una lista de otros temas de mensajes a los que debería suscribirse o información sobre cómo debe configurar su zona horaria local.

Los dispositivos que se conectan a través de una red móvil con conectividad intermitente pueden utilizar sesiones persistentes para evitar perder los mensajes importantes que se envían cuando un dispositivo está fuera de la cobertura de la red o necesita apagar la radio móvil.

Mensajes recibidos al suscribirse por primera vez a un tema

Tras suscribirse a un tema con un mensaje retenido, se recibe el mensaje retenido más reciente.

Tras suscribirse a un tema sin un mensaje retenido, no se recibe ningún mensaje hasta que se publique uno en el tema.

Temas suscritos tras la reconexión

Sin una sesión persistente, el cliente debe suscribirse a los temas tras la reconexión.

Los temas suscritos se restauran tras la reconexión.

Mensajes recibidos tras la reconexión

Tras suscribirse a un tema con un mensaje retenido, se recibe el mensaje retenido más reciente.

Todos los mensajes publicados con un QOS igual a 1 y a los que se haya suscrito con un QOS igual a 1 mientras el dispositivo estaba desconectado se envían cuando el dispositivo se vuelve a conectar.

Caducidad de los datos/sesiones

En MQTT 3, los mensajes retenidos no caducan. Se almacenan hasta que se sustituyan o eliminen. En MQTT 5, los mensajes retenidos caducan después del intervalo de caducidad establecido. Para obtener más información, consulte Caducidad de los mensajes.

Las sesiones persistentes caducan si el cliente no se vuelve a conectar dentro del periodo de espera. Cuando caduca una sesión persistente, se eliminan las suscripciones del cliente y los mensajes guardados que se publicaron con una QOS = 1 y a los que se suscribió con una QOS = 1 mientras el dispositivo estaba desconectado. Los mensajes caducados no se entregarán. Para obtener más información acerca de la caducidad de las sesiones con sesiones persistentes, consulte Sesiones persistentes de MQTT.

Para obtener más información acerca del almacenamiento persistente, consulte Sesiones persistentes de MQTT.

Con mensajes retenidos, el cliente de publicación determina si un mensaje debe conservarse y entregarse a un dispositivo después de que se conecte, independientemente de que haya tenido una sesión anterior o no. La elección de almacenar un mensaje la realiza el editor y el mensaje almacenado se entrega a todos los clientes actuales y futuros que se suscriban con suscripciones QoS 0 o QoS 1. Los mensajes retenidos guardan solo un mensaje sobre un tema determinado cada vez.

Cuando una cuenta ha almacenado el número máximo de mensajes retenidos, AWS IoT Core devuelve una respuesta limitada a los mensajes publicados con la marca RETAIN activada y con cargas útiles superiores a 0 bytes hasta que se eliminen algunos mensajes retenidos y el recuento de mensajes retenidos caiga por debajo del límite.

Los mensajes retenidos por MQTT y Device Shadows AWS IoT

Tanto los mensajes retenidos como las sombras de dispositivo retienen los datos de un dispositivo, pero se comportan de manera diferente y tienen diferentes propósitos. En esta sección se describen sus similitudes y diferencias.

Mensajes retenidos

Sombras del dispositivo

La carga de los mensajes tiene una estructura o un esquema predefinidos

Según lo definido por la implementación. MQTT no especifica una estructura o esquema para la carga de sus mensajes.

AWS IoT admite una estructura de datos específica.

La actualización de la carga del mensaje genera mensajes de eventos

Al publicar un mensaje retenido, se envía el mensaje a los clientes suscritos, pero no se generan mensajes de actualización adicionales.

La actualización de un a sombra de dispositivo produce los mensajes de actualización que describen el cambio.

Las actualizaciones de los mensajes están numeradas

Los mensajes retenidos no se numeran automáticamente. Los documentos de sombra de dispositivo tienen números de versión y marcas de tiempo automáticos.

La carga del mensaje está adjunta a un recurso

Los mensajes retenidos no se asocian a un recurso de objeto.

Las sombras de dispositivos se asocian a un recurso de objetos.

Actualización de los elementos individuales de la carga del mensaje

Los elementos individuales del mensaje no se pueden cambiar sin actualizar toda la carga del mensaje.

Los elementos individuales de un documento de sombra de dispositivo se pueden actualizar sin necesidad de actualizar todo el documento de sombra de dispositivo.

El cliente recibe los datos del mensaje al suscribirse

El cliente recibe automáticamente un mensaje retenido después de suscribirse a un tema con un mensaje retenido.

Los clientes pueden suscribirse a las actualizaciones de sombra de dispositivo, pero deben solicitar el estado actual de forma deliberada.

Indexación y capacidad de búsqueda

Los mensajes retenidos no se indexan para su búsqueda.

La indexación de flotas indexa los datos de sombra de dispositivo para su búsqueda y agregación.

Mensajes Last Will and Testament (LWT) de MQTT

Last Will and Testament (LWT) es una característica de MQTT. Con LWT, los clientes pueden especificar un mensaje que el agente publicará en un tema definido por el cliente y lo enviará a todos los clientes que se hayan suscrito al tema cuando se produzca una desconexión no iniciada. El mensaje que especifican los clientes se denomina mensaje LWT o mensaje Will, y el tema que definen los clientes se denomina tema Will. Puede especificar un mensaje LWT cuando un dispositivo se conecte al agente. Estos mensajes se pueden conservar configurando la marca Will Retain en el campo Connect Flag bits durante la conexión. Por ejemplo, si la marca Will Retain está establecido en 1, el mensaje Will se almacenará en el agente en el tema Will asociado. Para obtener más información, consulte Plantillas de mensaje.

El agente almacenará los mensajes Will hasta que se produzca una desconexión no iniciada. Cuando eso suceda, el agente publicará los mensajes para todos los clientes que se hayan suscrito al tema Will para notificarles la desconexión. Si el cliente se desconecta del agente con una desconexión iniciada por el cliente mediante el mensaje MQTT DISCONNECT, el agente no publicará los mensajes LWT almacenados. En el resto de los casos, se enviarán los mensajes de LWT. Para obtener una lista completa de los escenarios de desconexión en los que el agente enviará los mensajes de LWT, consulte Eventos de conexión y desconexión.

Uso de connectAttributes

ConnectAttributes le permite especificar qué atributos quiere usar en su mensaje de conexión en sus políticas de IAM, como PersistentConnect y LastWill. Con ConnectAttributes, puede crear políticas que no otorguen a los dispositivos acceso a nuevas características de forma predeterminada, lo que puede resultar útil si un dispositivo se ve comprometido.

connectAttributes admite las siguientes características:

PersistentConnect

Utilice la característica PersistentConnect para guardar todas las suscripciones que el cliente contrate durante la conexión cuando se interrumpa la conexión entre el cliente y el agente.

LastWill

Utilice la característica LastWill para publicar un mensaje LastWillTopic cuando un cliente se desconecte inesperadamente.

De forma predeterminada, su política tiene una conexión no persistente y no se transfieren atributos para esta conexión. Debe especificar una conexión persistente en su política de IAM si desea tener una.

Para ver ejemplos de ConnectAttributes, consulte Ejemplos de políticas de conexión.

Características compatibles con MQTT 5

AWS IoT Core la compatibilidad con MQTT 5 se basa en la especificación MQTT v5.0, con algunas diferencias, tal y como se describe en. AWS IoT diferencias con las especificaciones de MQTT

Suscripciones compartidas

AWS IoT Core admite suscripciones compartidas tanto para MQTT 3 como para MQTT 5. Las suscripciones compartidas permiten que varios clientes compartan una suscripción a un tema y solo un cliente recibirá los mensajes publicados sobre ese tema mediante una distribución aleatoria. Las suscripciones compartidas pueden equilibrar eficazmente la carga de los mensajes MQTT entre varios suscriptores. Por ejemplo, supongamos que tiene 1000 dispositivos que publican sobre el mismo tema y 10 aplicaciones de segundo plano que procesan esos mensajes. En ese caso, las aplicaciones de segundo plano pueden suscribirse al mismo tema y cada una de ellas recibiría de forma aleatoria los mensajes publicados por los dispositivos en el tema compartido. De hecho, se trata de “compartir” la carga de esos mensajes. Las suscripciones compartidas también brindan una mayor resiliencia. Cuando una aplicación de segundo plano se desconecta, el agente distribuye la carga entre los suscriptores restantes del grupo.

Para usar las suscripciones compartidas, los clientes se suscriben al filtro de temas de una suscripción compartida de la siguiente manera:

$share/{ShareName}/{TopicFilter}
  • $share es una cadena literal que indica el filtro de temas de una suscripción compartida, que debe empezar por $share.

  • {ShareName} es una cadena de caracteres para especificar el nombre compartido utilizado por un grupo de suscriptores. El filtro de temas de una suscripción compartida debe contener un ShareName e ir seguido por el carácter /. {ShareName} no debe incluir los siguientes caracteres: /, + o #. El tamaño máximo de {ShareName} es de 128 bytes.

  • {TopicFilter} sigue la misma sintaxis de filtro de temas que una suscripción no compartida. El tamaño máximo de {TopicFilter} es de 256 bytes.

  • Las dos barras diagonales obligatorias (/) de $share/{ShareName}/{TopicFilter} no se incluyen en el número máximo de barras diagonales por tema y en el límite de filtros de temas.

Las suscripciones que tienen el mismo {ShareName}/{TopicFilter} pertenecen al mismo grupo de suscripciones compartidas. Puede crear varios grupos de suscripciones compartidas y no superar el límite de suscripciones compartidas por grupo. Para obtener más información, consulte Puntos de conexión y cuotas de AWS IoT Core en la Referencia general de AWS .

En las siguientes tablas se comparan las suscripciones no compartidas y las suscripciones compartidas:

Suscripción Descripción Ejemplos de filtros de temas
Suscripciones no compartidas Cada cliente crea una suscripción independiente para recibir los mensajes publicados. Cuando se publica un mensaje en un tema, todos los suscriptores de ese tema reciben una copia del mensaje.
sports/tennis sports/#
Suscripciones compartidas Varios clientes pueden compartir una suscripción a un tema y solo un cliente recibirá los mensajes publicados sobre ese tema de forma aleatoria.
$share/consumer/sports/tennis $share/consumer/sports/#
Flujo de suscripciones no compartidas Flujo de suscripciones compartidas
Suscripciones regulares para MQTT 3 y MQTT 5 pulgadas. AWS IoT Core
Suscripciones compartidas para MQTT de 3 y MQTT de 5 pulgadas. AWS IoT Core

Notas importantes sobre el uso de las suscripciones compartidas

  • Si se produce un error al intentar publicar un suscriptor de QoS0, no se volverá a intentar y el mensaje se omitirá.

  • Si se produce un error al intentar publicar un suscriptor de QoS1 con una sesión limpia, el mensaje se enviará a otro suscriptor del grupo para que vuelva a intentarlo varias veces. Los mensajes que no se entreguen después de todos los intentos de reintento se eliminarán.

  • Si se produce un error al intentar publicar a un suscriptor de QoS1 con sesiones persistentes porque el suscriptor está desconectado, los mensajes no se pondrán en cola y se intentarán enviar a otro suscriptor del grupo. Los mensajes que no se entreguen después de todos los intentos de reintento se eliminarán.

  • Las suscripciones compartidas no reciben los mensajes retenidos.

  • Cuando las suscripciones compartidas contienen caracteres comodín (# o +), es posible que haya varias suscripciones compartidas que coincidan con un tema. Si eso ocurre, el agente de mensajes copia el mensaje de publicación y lo envía a un cliente aleatorio en cada suscripción compartida coincidente. El comportamiento comodín de las suscripciones compartidas se explica en el siguiente diagrama.

    Suscripciones compartidas con caracteres comodín. AWS IoT Core

    En este ejemplo, hay tres suscripciones compartidas que coinciden con el tema de publicación sports/tennis de MQTT. El agente de mensajes copia el mensaje publicado y lo envía a un cliente aleatorio de cada grupo coincidente.

    El cliente 1 y el cliente 2 comparten la suscripción: $share/consumer1/sports/tennis

    El cliente 3 y el cliente 4 comparten la suscripción: $share/consumer1/sports/#

    El cliente 5 y el cliente 6 comparten la suscripción: $share/consumer2/sports/tennis

Para obtener más información sobre los límites de las suscripciones compartidas, consulte Puntos de conexión y las cuotas de AWS IoT Core en la Referencia general de AWS . Para probar las suscripciones compartidas mediante el cliente AWS IoT MQTT de la AWS IoT consola, consulte. Probar las suscripciones compartidas en el cliente MQTT Para obtener más información sobre las suscripciones compartidas, consulte Suscripciones compartidas de la especificación MQTT v5.0.

Inicio limpio y caducidad de la sesión

Puede usar las funciones de inicio limpio y caducidad de la sesión para gestionar sus sesiones persistentes con más flexibilidad. Un marca de inicio limpio indica si la sesión debe iniciarse sin utilizar una sesión existente. Un intervalo de caducidad de la sesión indica cuánto tiempo se debe conservar la sesión tras una desconexión. El intervalo de caducidad de la sesión se puede modificar al desconectarse. Para obtener más información, consulte Sesiones persistentes de MQTT.

Código de motivo en todos los ACK

Puede depurar o procesar los mensajes de error más fácilmente utilizando los códigos de motivo. El agente de mensajes devuelve los códigos de motivo en función del tipo de interacción con el agente (suscribirse, publicar o confirmar). Para obtener más información, consulte Códigos de motivo de MQTT. Para obtener una lista completa de los códigos de motivo de MQTT, consulte la especificación de MQTT v5.

Alias de temas

Puede sustituir el nombre de un tema por un alias de tema, que es un entero de dos bytes. El uso de alias de temas puede optimizar la transmisión de los nombres de los temas y reducir potencialmente los costos de datos en los servicios de datos medidos. AWS IoT Core tiene un límite predeterminado de 8 alias de temas. Para obtener más información, consulte Puntos de conexión y cuotas de AWS IoT Core en la Referencia general de AWS .

Caducidad de los mensajes

Puede agregar valores de caducidad de los mensajes a los mensajes publicados. Estos valores representan el intervalo de caducidad de los mensajes en segundos. Si los mensajes no se envían a los suscriptores en ese intervalo, los mensajes caducan y se eliminan. Si no establece el valor de caducidad del mensaje, el mensaje no caducará.

Al salir, el suscriptor recibirá un mensaje con el tiempo restante del intervalo de caducidad. Por ejemplo, si un mensaje de publicación entrante tiene una caducidad de 30 segundos y se envía al suscriptor después de 20 segundos, el campo de caducidad del mensaje se actualizará a 10. Es posible que el mensaje recibido por el suscriptor tenga un MEI actualizado de 0. Esto se debe a que tan pronto como el tiempo restante sea de 999 ms o menos, se actualizará a 0.

En AWS IoT Core, el intervalo mínimo de caducidad de los mensajes es 1. Si el intervalo se establece en 0 desde el lado del cliente, se ajustará a 1. El intervalo máximo de caducidad de mensajes es 604800 (7 días). Cualquier valor superior a este valor se ajustará al valor máximo.

En la comunicación entre versiones, el comportamiento de caducidad del mensaje lo decide la versión MQTT del mensaje de publicación entrante. Por ejemplo, un mensaje con fecha de caducidad enviado por una sesión conectada a través de MQTT5 puede caducar en el caso de los dispositivos suscritos con sesiones de MQTT3. En la siguiente tabla se muestra cómo la caducidad de los mensajes admite los siguientes tipos de mensajes de publicación:

Tipo de mensaje de publicación Intervalo de caducidad de los mensajes
Publicación regular Si un servidor no entrega el mensaje en el tiempo especificado, el mensaje caducado se eliminará y el suscriptor no lo recibirá. Esto incluye situaciones como cuando un dispositivo no publica sus mensajes de QoS 1.
Retener Si un mensaje retenido caduca y un cliente nuevo se suscribe al tema, el cliente no recibirá el mensaje al suscribirse.
Última voluntad El intervalo de los mensajes de última voluntad comienza después de que el cliente se desconecte y el servidor intente entregar el mensaje de última voluntad a sus suscriptores.
Mensajes en cola Si un QoS1 saliente con intervalo de caducidad de mensajes caduca cuando un cliente está desconectado, cuando se reanude la sesión persistente, el cliente no recibirá el mensaje caducado.

Otras características de MQTT 5

Desconexión del servidor

Cuando se produce una desconexión, el servidor puede enviar de forma proactiva al cliente una desconexión para notificar el cierre de la conexión con un código de motivo de la desconexión.

Solicitud/respuesta

Los editores pueden solicitar que el destinatario envíe una respuesta a un tema especificado por el editor en el momento de la recepción.

Tamaño máximo de paquete

El cliente y el servidor pueden especificar de forma independiente el tamaño máximo de paquete que admiten.

Formato de carga y tipo de contenido

Puede especificar el formato de carga (binario, texto) y el tipo de contenido al publicar un mensaje. Se reenvían al destinatario del mensaje.

Propiedades de MQTT 5

Las propiedades de MQTT 5 son adiciones importantes al estándar MQTT para admitir las nuevas características de MQTT 5, como la caducidad de sesión y el patrón de solicitud/respuesta. En AWS IoT Core, puede crear reglas que reenvíen las propiedades de los mensajes salientes o utilizar HTTP Publish para publicar los mensajes MQTT con algunas de las propiedades nuevas.

La siguiente tabla muestra todas las propiedades de MQTT 5 compatibles. AWS IoT Core

Propiedad Descripción Tipo de entrada Paquete
Indicador de formato de carga Un valor booleano que indica si la carga tiene formato UTF-8. Byte PUBLISH, CONNECT
Tipo de contenido Una cadena UTF-8 que describe el contenido de la carga. Cadena UTF-8 PUBLISH, CONNECT
Tema de respuesta Una cadena UTF-8 que describe el tema en el que el receptor debe publicar como parte del flujo de solicitud-respuesta. El tema no debe contener caracteres comodín. Cadena UTF-8 PUBLISH, CONNECT
Datos de correlación Los datos binarios que utiliza el remitente del mensaje de solicitud para identificar a qué solicitud corresponde el mensaje de respuesta. Binario PUBLISH, CONNECT
Propiedades del usuario Un par de cadenas UTF-8. Esta propiedad puede aparecer varias veces en un paquete. Los receptores recibirán los pares clave-valor en el mismo orden en que se enviaron. Par de cadenas UTF-8 CONNECT, PUBLISH, Propiedades Will, SUBSCRIBE, DISCONNECT, UNSUBSCRIBE
Intervalo de caducidad de los mensajes Un entero de 4 bytes que representa el intervalo de caducidad del mensaje en segundos. Si no existe, el mensaje no vence. Entero de 4 bytes PUBLISH, CONNECT
Intervalo de caducidad de la sesión

Un entero de 4 bytes que representa el intervalo de caducidad de la sesión en segundos. AWS IoT Core admite un máximo de 7 días, con un máximo predeterminado de una hora. Si el valor que ha establecido supera el máximo de su cuenta, AWS IoT Core devolverá el valor ajustado en el CONNACK.

Entero de 4 bytes CONNECT, CONNACK, DISCONNECT
Identificador de cliente asignado Un ID de cliente aleatorio que se genera AWS IoT Core cuando los dispositivos no especifican un ID de cliente. El ID de cliente aleatorio debe ser un identificador de cliente nuevo que no utilice ninguna otra sesión gestionada actualmente por el agente. Cadena UTF-8 CONNACK
Servidor Keep Alive Un entero de 2 bytes que representa el tiempo de mantenimiento activo asignado por el servidor. El servidor desconectará al cliente si el cliente permanece inactivo durante más tiempo que el tiempo de mantenimiento activo. Entero de 2 bytes CONNACK
Solicitar información sobre el problema Un valor booleano que indica si la cadena de motivo o las propiedades del usuario se envían en caso de errores. Byte CONNECT
Recibir máximo Un entero de 2 bytes que representa el número máximo de paquetes PUBLISH QOS > 0 que se pueden enviar sin recibir un PUBACK. Entero de 2 bytes CONNECT, CONNACK
Máximo de alisas de tema Este valor indica el valor más alto que se aceptará como alias de tema. El valor predeterminado es 0. Entero de 2 bytes CONNECT, CONNACK
QoS máxima El valor máximo de QoS que AWS IoT Core admite. El valor predeterminado es 1. AWS IoT Core no admite QoS2. Byte CONNACK
Retener disponible

Un valor booleano que indica si el agente de mensajes admite los AWS IoT Core mensajes retenidos. El valor predeterminado de es 1.

Byte CONNACK
Tamaño máximo de paquete El tamaño máximo de paquete que se AWS IoT Core acepta y envía. No puede superar los 128 KB. Entero de 4 bytes CONNECT, CONNACK
Suscripción comodín disponible

Un valor booleano que indica si el agente de AWS IoT Core mensajes admite la suscripción Wildcard disponible. El valor predeterminado de es 1.

Byte CONNACK
Identificador de suscripción disponible

Valor booleano que indica si el agente de AWS IoT Core mensajes admite el identificador de suscripción disponible. El valor predeterminado es 0.

Byte CONNACK

Códigos de motivo de MQTT

MQTT 5 introduce una mejora en la notificación de errores con respuestas en códigos de motivo. AWS IoT Core puede devolver códigos de motivo, incluidos, entre otros, los siguientes agrupados por paquetes. Para obtener una lista completa de los códigos de motivo compatibles con MQTT 5, consulte las especificaciones de MQTT 5.

Códigos de motivo de CONNACK
Valor Hex Motivo: nombre en clave Descripción
0 0x00 Success Se acepta la conexión.
128 0x80 Error no especificado El servidor no desea revelar el motivo del fallo o no se aplica ninguno de los otros códigos de motivo.
133 0x85 El identificador de cliente no es válido El identificador del cliente es una cadena válida, pero el servidor no lo permite.
134 0x86 Nombre de usuario o contraseña incorrectos El servidor no acepta el nombre de usuario o la contraseña especificados por el cliente.
135 0x87 No tiene autorización El cliente no está autorizado a conectarse.
144 0x90 El nombre del tema no es válido El nombre del tema Will está formado correctamente, pero el servidor no lo acepta.
151 0x97 Cuota excedida Se ha superado un límite de implementación o impuesto por la administración.
155 0x9B QoS no admitida El servidor no admite la QoS establecida en Will QoS.
Códigos de motivo de PUBACK
Valor Hex Motivo: nombre en clave Descripción
0 0x00 Success Se acepta el mensaje. Continúa la publicación del mensaje de QoS 1.
128 0x80 Error no especificado El receptor no acepta la publicación, pero no quiere revelar el motivo o no coincide con ninguno de los otros valores.
135 0x87 No tiene autorización La PUBLICACIÓN no está autorizada.
144 0x90 El nombre del tema no es válido El nombre del tema no tiene un formato incorrecto, pero el cliente o el servidor no lo aceptan.
145 0x91 Identificador de paquetes en uso El identificador del paquete ya está en uso. Esto puede indicar una discrepancia en el estado de la sesión entre el cliente y el servidor.
151 0x97 Cuota excedida Se ha superado un límite de implementación o impuesto por la administración.
Códigos de motivo de desconexión
Valor Hex Motivo: nombre en clave Descripción
129 0x81 Paquete con formato incorrecto El paquete recibido no cumple con esta especificación.
130 0x82 Error de protocolo Se recibió un paquete inesperado o fuera de servicio.
135 0x87 No tiene autorización La solicitud no está autorizada.
139 0x8B El servidor se está apagando El servidor se está apagando.
141 0x8D Tiempo de espera de Keep Alive La conexión está cerrada porque no se ha recibido ningún paquete durante 1,5 veces el tiempo de Keep Alive.
142 0x8E Sesión sustituida Se ha conectado otra conexión que utiliza el mismo ID de cliente, lo que provoca el cierre de esta conexión.
143 0x8F Filtro de tema no válido El filtro de temas está formado correctamente, pero el servidor no lo acepta.
144 0x90 El nombre del tema no es válido El nombre del tema está formado correctamente, pero este cliente o servidor no lo acepta.
147 0x93 Límite de recepción excedido El cliente o servidor ha recibido más publicaciones que la cantidad máxima de recepción para la que no ha enviado PUBACK o PUBCOMP.
148 0x94 Alias de tema no válido El cliente o el servidor ha recibido un paquete PUBLISH que contiene un alias de tema superior al alias de tema máximo que envió en el paquete CONNECT o CONNACK.
151 0x97 Cuota excedida Se ha superado un límite de implementación o impuesto por la administración.
152 0x98 Acción administrativa La conexión se cierra debido a una acción administrativa.
155 0x9B QoS no admitida El cliente especificó una QoS superior a la QoS especificada en una QoS máxima en el CONNACK.
161 0xA1 No se admiten los identificadores de suscripción El servidor no admite identificadores de suscripción; no se acepta la suscripción.
Códigos de motivo de SUBACK
Valor Hex Motivo: nombre en clave Descripción
0 0x00 QoS 0 concedida Se acepta la suscripción y la QoS máxima enviada será QoS 0. Esto podría ser una QoS inferior a la solicitada.
1 0x01 QoS 1 concedida Se acepta la suscripción y la QoS máxima enviada será QoS 1. Esto podría ser una QoS inferior a la solicitada.
128 0x80 Error no especificado No se acepta la suscripción y el servidor no quiere revelar el motivo o no se aplica ninguno de los demás códigos de motivo.
135 0x87 No tiene autorización El cliente no está autorizado a realizar esta suscripción.
143 0x8F Filtro de tema no válido El filtro de temas está formado correctamente, pero no está permitido para este cliente.
145 0x91 Identificador de paquetes en uso El identificador de paquete especificado ya está en uso.
151 0x97 Cuota excedida Se ha superado un límite de implementación o impuesto por la administración.
Códigos de motivo de UNSUBACK
Valor Hex Motivo: nombre en clave Descripción
0 0x00 Success Se elimina la suscripción.
128 0x80 Error no especificado No se ha podido cancelar la suscripción y el servidor no quiere revelar el motivo o no se aplica ninguno de los demás códigos de motivo.
143 0x8F Filtro de tema no válido El filtro de temas está formado correctamente, pero no está permitido para este cliente.
145 0x91 Identificador de paquetes en uso El identificador de paquete especificado ya está en uso.

AWS IoT diferencias con las especificaciones de MQTT

La implementación del agente de mensajes se basa en la especificación MQTT v3.1.1 y la especificación MQTT v5.0, pero se diferencia de las especificaciones en los siguientes aspectos:

  • AWS IoT no admite los siguientes paquetes para MQTT 3: PUBREC, PUBREL y PUBCOMP.

  • AWS IoT no admite los siguientes paquetes para MQTT 5: PUBREC, PUBREL, PUBCOMP y AUTH.

  • AWS IoT no admite la redirección de servidores MQTT 5.

  • AWS IoT solo admite los niveles de calidad de servicio (QoS) 0 y 1 de MQTT. AWS IoT no admite la publicación ni la suscripción con el nivel 2 de QoS. El agente de mensajes no envía PUBACK o SUBACK cuando se solicita QoS nivel 2.

  • En AWS IoT, suscribirse a un tema con un nivel de QoS 0 significa que un mensaje se entrega cero o más veces. Es posible que un mensaje se entregue más de una vez. Los mensajes que se entreguen más de una vez pueden enviarse con otro ID de paquete. En tal caso, la marca DUP no se establece.

  • Cuando responde a una solicitud de conexión, el agente de mensajes envía un mensaje CONNACK. Este mensaje contiene una marca para indicar si la conexión reanuda una sesión anterior.

  • Antes de enviar paquetes de control adicionales o una solicitud de desconexión, el cliente debe esperar a que recibir el mensaje CONNACK del agente de mensajes de AWS IoT .

  • Cuando un cliente se suscribe a un tema, puede haber un retraso entre el momento en que el agente de mensajes envía un SUBACK y el momento en que el cliente empieza a recibir nuevos mensajes coincidentes.

  • Cuando un cliente utiliza el carácter comodín # del filtro de temas para suscribirse a un tema, coinciden todas las cadenas que estén en su nivel o por debajo de él en la jerarquía de temas. Sin embargo, el tema principal no coincide. Por ejemplo, una suscripción al tema sensor/# recibe los mensajes publicados en los temas sensor/, sensor/temperature y sensor/temperature/room1, pero no los mensajes publicados en sensor. Para obtener más información acerca de cómo utilizar comodines, consulte Filtros de temas.

  • El agente de mensajes utiliza el ID de cliente para identificar a cada cliente. El ID de cliente se transfiere desde el cliente al agente de mensajes como parte de la carga de MQTT. Dos clientes que tengan el mismo ID de cliente no pueden estar conectados simultáneamente al agente de mensajes. Cuando un cliente se conecta al agente de mensajes mediante un ID de cliente que otro cliente está utilizando, se acepta la nueva conexión de cliente y se desconecta el cliente previamente conectado.

  • En raras ocasiones, el agente de mensajes reenviará el mismo mensaje PUBLISH lógico con otro ID de paquete.

  • La suscripción a filtros de temas que contienen un carácter comodín no puede recibir los mensajes retenidos. Para recibir un mensaje retenido, la solicitud de suscripción debe contener un filtro de tema que coincida exactamente con el tema del mensaje retenido.

  • El agente de mensajes no garantiza el orden de recepción de los mensajes y ACK.

  • AWS IoT puede tener límites distintos de los especificados. Para obtener más información, consulte Límites y cuotas del agente de mensajes y del protocolo de AWS IoT Core en la Guía de referencia de AWS IoT .

  • No se admite el indicador MQTT DUP.