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
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 Dispositivo SDKs es compatible con ambos protocolos y son las formas recomendadas de conectar los dispositivos a AWS IoT Core. El AWS IoT dispositivo SDKs admite las funciones necesarias para que los dispositivos y los clientes se conecten a los servicios y accedan AWS IoT a ellos. El dispositivo SDKs admite 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 el AWS dispositivo SDKs y enlaces a ejemplos AWS IoT en los idiomas compatibles, consulte. Conexión con MQTT mediante el dispositivo AWS IoT SDKs 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 el AWS IoT dispositivo SDKs para conectarse AWS IoT, no son obligatorios. Sin embargo SDKs, si no utiliza el AWS IoT Dispositivo, debe 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 este tema:
- Conexión con MQTT mediante el dispositivo AWS IoT SDKs
- Opciones de calidad de servicio (QoS) de MQTT
- Sesiones persistentes de MQTT
- Mensajes retenidos de MQTT
- Mensajes Last Will and Testament (LWT) de MQTT
- Uso de connectAttributes
- Características compatibles con MQTT 5
- Propiedades de MQTT 5
- Códigos de motivo de MQTT
- AWS IoT diferencias con las especificaciones de MQTT
Conexión con MQTT mediante el dispositivo AWS IoT SDKs
Esta sección contiene enlaces al AWS IoT dispositivo SDKs y al código fuente de programas de muestra que ilustran cómo conectar un dispositivo al AWS IoT mismo. Las aplicaciones de muestra enlazadas aquí muestran cómo conectarse AWS IoT mediante el protocolo MQTT y MQTT a través de WSS.
nota
The AWS IoT Device SDKs ha lanzado un cliente MQTT 5.
Opciones de calidad de servicio (QoS) de MQTT
AWS IoT y el AWS IoT dispositivo SDKs admiten los niveles de calidad de servicio (QoS) 0
de MQTT1
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 |
El mensaje no se considera completo hasta que el remitente reciba una respuesta |
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.
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 marcacleanSession
en1
.
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
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 la marca RETAIN activada. 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.
En esta sección:
Las tareas habituales con mensajes MQTT retenidos en AWS IoT Core
AWS IoT Core guarda los mensajes MQTT con el indicador RETAIN establecido. 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
yGetRetainedMessage
.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 campoConnect 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 GetRetainedMessage
conlleva 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
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 mensajeLastWillTopic
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
AWS IoT Core admite las siguientes funciones de MQTT 5:
Suscripciones compartidas
AWS IoT Core admite suscripciones compartidas para MQTT 3 y 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 unShareName
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. |
|
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. |
|
Flujo de suscripciones no compartidas | Flujo de suscripciones compartidas |
---|---|
![]() |
![]() |
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.
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
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 todas ACKs
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 a través de la cual se ha conectado MQTT5 puede caducar en el caso de los dispositivos suscritos con sesiones. 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 usar HTTP Publish para publicar mensajes MQTT con algunas de las nuevas propiedades.
En la siguiente tabla se enumeran 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 |
Un 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
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. |
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. |
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. |
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. |
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
-
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 temasensor/#
recibe los mensajes publicados en los temassensor/
,sensor/temperature
ysensor/temperature/room1
, pero no los mensajes publicados ensensor
. 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.