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)
Una vez que sus clientes estén conectados, puede supervisar y gestionar sus conexiones de clientes MQTT mediante. APIs Para obtener más información, consulte Gestión de las conexiones MQTT.
En este tema:
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 CloudWatch métricas y registros. 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 QoS 1 saliente con el intervalo de caducidad del mensaje 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.
En el caso de los suscriptores compartidos, los mensajes se pondrán en cola si al menos un suscriptor de un grupo utiliza una sesión persistente y ningún suscriptor está conectado para recibir el mensaje de QoS 1. La eliminación de la cola de mensajes se realiza a una velocidad máxima de 20 mensajes por segundo por cada suscriptor activo de un grupo. Para obtener más información, consulta la sección sobre la cola de mensajes de suscripciones compartidas.
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
. -
El cliente se desconecta manualmente y se borra la sesión mediante la
DeleteConnection
API. Para obtener más información, consulte Gestión de las conexiones MQTT.
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 RETAIN
indicador descrito en el protocolo MQTT. Cuando un cliente establece la RETAIN
marca 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 en MQTT inmediatamente después de su suscripción, puede publicar un mensaje de configuración con el
RETAIN
indicador puesto. 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
RETAIN
marcar los mensajes en estado actual para AWS IoT Core guardarlos. 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 la RETAIN
bandera puesta. 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
RETAIN
marca cuando publican un mensaje mediante un SDK de dispositivo. Las aplicaciones y los servicios pueden establecer laRETAIN
marca cuando utilizan laPublish
acción 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
RETAIN
bandera puesta. -
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
RETAIN
marca puesta.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 el
RETAIN
indicador activado. 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 mensajes retenido sin establecer la
RETAIN
marca. 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 el
RETAIN
marcador puesto 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 CoreLos 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. También puede usar el cliente de prueba MQTT para supervisar los mensajes de los clientes conectados que administra a través de la interfaz de conexiones del cliente. Para obtener más información sobre la administración de las conexiones de los clientes, consulteGestión de las conexiones MQTT.
Algunos resultados inesperados pueden deberse a estos aspectos de la implementación de 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 RETAIN
marca marcada desde un cliente, mediante una AWS IoT
consola o mediante una llamada Publish
conlleva los gastos de mensajería adicionales descritos en AWS IoT Core la sección de precios (Mensajes).
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 de los mensajes que hayas 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 a 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.
MQTT retuvo los mensajes 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
Al administrar las conexiones de los clientes, puede controlar si los mensajes de LWT se publican al desconectar un cliente. Para obtener más información, consulte Gestión de las conexiones MQTT.
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.
Al administrar las conexiones de los clientes, puede ver los atributos de conexión y la configuración de sesión de los clientes conectados. Para obtener más información, consulte Gestión de las conexiones MQTT.
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 tanto para MQTT 3.1.1 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 secundarias pueden suscribirse al mismo tema y cada una de ellas recibiría aleatoriamente los mensajes publicados por los dispositivos sobre el tema compartido. De hecho, se trata de “compartir” la carga de esos mensajes. Las suscripciones compartidas también permiten una mayor resiliencia. Cuando una aplicación de segundo plano se desconecta, el agente distribuye la carga entre los suscriptores restantes del grupo. Cuando todos los suscriptores se desconectan, los mensajes se ponen en cola.
Las funciones de cola de mensajes están disponibles para las suscripciones compartidas en las conexiones MQTT 3.1.1 y MQTT 5 a fin de mejorar la fiabilidad de la entrega de mensajes.
Para utilizar 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 incluir un carácterShareName
e ir seguido del/
carácter.{ShareName}
no debe incluir los siguientes caracteres:/
,+
o#
. El tamaño máximo{ShareName}
es de 128 caracteres UTF-8. -
{TopicFilter}
sigue la misma sintaxis de filtro de temas que una suscripción no compartida. El tamaño máximo{TopicFilter}
es de 256 caracteres UTF-8. -
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 contenido {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 suscripciones compartidas
-
Si el grupo de suscriptores compartido está formado por suscriptores de sesión persistentes, si todos los suscriptores del grupo compartido están desconectados o si algún suscriptor infringe el límite de solicitudes de publicación por segundo por conexión, se pondrán en cola todos los mensajes de QoS 1 no confirmados y los mensajes de QoS 1 no entregados publicados en un grupo de suscripciones compartidas. Para obtener más información, consulte la sección sobre la cola de mensajes de suscripciones compartidas.
-
Los mensajes de QoS 0 publicados en un grupo de suscripción compartido se eliminarán en caso de que se produzca un error.
-
Las suscripciones compartidas no reciben los mensajes retenidos cuando se suscriben a patrones de temas como parte de un grupo de suscriptores compartido. Los mensajes que se publican sobre temas que tienen suscriptores compartidos y que tienen la
RETAIN
marca activada se envían a los suscriptores compartidos como cualquier otro mensaje publicado. -
Cuando las suscripciones compartidas contienen caracteres comodín (# o +), es posible que haya varias suscripciones compartidas coincidentes para 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 de MQTT.
sports/tennis
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 los AWS IoT Core puntos finales y las cuotas en la Referencia AWS general. Para probar las suscripciones compartidas mediante el cliente AWS IoT MQTT de la AWS IoT consola, consulte
Suscripciones compartidas (cola de mensajes)
Para mejorar la fiabilidad de la entrega de mensajes, las suscripciones compartidas incluyen funciones de cola de mensajes que almacenan los mensajes cuando no hay suscriptores en línea disponibles. Cuando un grupo de suscripciones compartidas contiene al menos un miembro con una sesión persistente, la función de cola está habilitada para el grupo. Al distribuir los mensajes, los miembros en línea se seleccionan como destinatarios. Los mensajes de QoS 1 se ponen en cola cuando no se encuentra ningún miembro en línea o cuando los suscriptores superan el límite. Publish requests per second per connection
Los mensajes en cola se entregan cuando los miembros existentes reanudan sus sesiones persistentes o cuando los miembros nuevos se unen al grupo. Los mensajes en cola se envían a una velocidad máxima de 20 mensajes por segundo por cada suscriptor activo del grupo, junto con cualquier otro mensaje que se entregue al suscriptor según las suscripciones.
De forma predeterminada, la retención de mensajes en cola sigue la cuota. Persistent Session expiry period
Sin embargo, si se establece un intervalo de caducidad de mensajes (MEI) en el mensaje de publicación entrante, el MEI tiene prioridad. Cuando el MEI está presente, determina el período de retención del mensaje, independientemente del período de caducidad de la sesión persistente.
Las tasas de cola de mensajes están limitadas en función de la Queued messages per second per account
cuota y la cantidad de mensajes está limitada por la Maximum number of queued messages per shared subscription group
cuota.
Cuando se superan estos límites, solo se conservan los mensajes que ya estaban en cola antes de alcanzar el límite. Se eliminan los nuevos mensajes entrantes que superen los límites. El sistema no reemplaza los mensajes antiguos en cola por otros más nuevos.
La cola de mensajes se registra en CloudWatch las métricas y CloudWatch los registros. 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. Los mensajes en cola se siguen facturando a la tarifa de mensajería estándar. Para obtener más información sobre los precios de los mensajes, consulte Precios de AWS IoT Core
Ciclo de vida de la sesión en un grupo de suscripciones compartidas
Cuando una sesión limpia se suscribe a un grupo, se convierte en miembro en línea del grupo. Cuando se cancela la suscripción o se desconecta, la sesión limpia abandona el grupo.
Cuando una sesión persistente se suscribe a un grupo, pasa a ser miembro en línea del grupo. Cuando se desconecta, permanece en el grupo, pero pasa a ser miembro del grupo sin conexión. Cuando se vuelve a conectar, vuelve a ser miembro en línea. La sesión persistente abandona el grupo cuando se da de baja de forma explícita o cuando caduca tras la desconexión.
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 del mensaje (MEI) 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 MEI mínimo 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 MQTT3 sesiones. 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 QoS 1 saliente con intervalo de caducidad de mensajes caduca cuando un cliente está desconectado, una vez que 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 funciones de MQTT 5, como la caducidad de sesión y el patrón. Request/Response 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 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 útil está formateada como 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 es compatible con QoS 2. | 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 nombres 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. También puede desconectar los clientes manualmente mediante. APIs Para obtener más información, consulte Gestión de las conexiones MQTT.
-
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.
Gestión de las conexiones MQTT
AWS IoT Core proporciona ayuda APIs para gestionar las conexiones MQTT, incluida la posibilidad de desconectar los clientes y gestionar sus sesiones. Estas funciones le proporcionan un mayor control sobre su flota de AWS IoT clientes y le ayudan a solucionar problemas de conexión.
DeleteConnection API
Utilice la DeleteConnection
API para desconectar los dispositivos MQTT AWS IoT Core especificando su cliente IDs. Al desconectar un cliente, lo AWS IoT Core desconecta del intermediario de mensajes y, si lo desea, puede limpiar el estado de la sesión y suprimir el AWS IoT Core mensaje de Last Will and Testament (LWT).
Cuando llamas a la DeleteConnection
API, AWS IoT Core realiza varias acciones para garantizar una desconexión limpia. AWS IoT Core primero envía un mensaje de desconexión de MQTT al cliente para finalizar la sesión de MQTT. A continuación, el servicio cierra el conector subyacente TCP/TLS .
El agente de mensajes envía un DISCONNECT
paquete al dispositivo y publica un evento del ciclo de vida con el motivo de la desconexiónAPI_INITIATED_DISCONNECT
. Esto le ayuda a identificar cuándo se inició una desconexión a través de la API y no por el cliente o si se debió a problemas de red. Puede supervisar estos eventos con fines de visibilidad, resolución de problemas y auditoría. Por ejemplo, puede usar AWS IoT reglas para procesar estos eventos y realizar un seguimiento de cuándo y por qué se desconectaron los clientes.
Si establece el cleanSession
parámetro entrue
, AWS IoT Core elimina el estado de la sesión del cliente, incluidas todas las suscripciones y los mensajes en cola. Si limpia una sesión, la sesión persistente finaliza. Si el cliente era una sesión persistente y el preventWillMessage
parámetro está establecido enfalse
, el servicio envía el mensaje LWT si está disponible, lo que resulta útil durante las operaciones de mantenimiento planificadas.
Cuando llamas a la DeleteConnection
API, el proceso de desconexión comienza inmediatamente, pero el momento exacto en que el cliente reconoce la desconexión puede variar en función de las condiciones de la red y de la implementación del cliente. La mayoría de los clientes detectarán la desconexión en unos segundos, pero en algunos casos con una conectividad de red deficiente, es posible que el cliente tarde más en reconocer que se ha desconectado.
nota
Al forzar la desconexión, el cliente debe volver a autenticarse y volver a autorizarse con un estado de sesión nuevo. La llamada a la API en sí misma no impide la reconexión de los clientes. Si lo desea, también debe modificar la credencial o política del cliente antes de emitir la llamada a la DeleteConnection
API.
Para obtener información sobre precios, consulte Precios de AWS IoT Core
Casos de uso
La DeleteConnection
API es útil para gestionar los clientes que se comportan mal y que muestran un comportamiento problemático o consumen recursos excesivos. Al forzar la desconexión, puede asegurarse de que los clientes restablezcan sus conexiones con la autenticación y la autorización adecuadas, lo que puede ayudar a resolver los problemas de consumo de recursos.
Los escenarios de redireccionamiento de clientes también se benefician de esta API. Cuando necesite redirigir a los clientes a distintos puntos de conexión o bien Regiones de AWS, puede desconectarlos mediante programación y hacer que se vuelvan a conectar a un AWS IoT Core punto final diferente cambiando la configuración de DNS. Esta API puede ayudar a resolver conexiones bloqueadas o eliminar estados de sesión problemáticos que podrían estar impidiendo el funcionamiento normal.
Parámetros de la API
La DeleteConnection
API acepta los siguientes parámetros:
- ClientiD (obligatorio)
-
El identificador único del cliente MQTT que se va a desconectar. Se especifica en la ruta URL. El ID de cliente no puede empezar con un signo de dólar ($).
nota
El cliente MQTT IDs puede contener caracteres que no son válidos en las solicitudes HTTP. Al utilizar la
DeleteConnection
API, debe codificar mediante URL (codificación porcentual) cualquier carácter del ID de cliente que sea válido en MQTT pero no en HTTP. Esto incluye caracteres especiales como espacios, barras diagonales (/) y caracteres UTF-8. Por ejemplo, un espacio se convierte en %20, una barra diagonal se convierte en %2F y el carácter UTF-8 ü se convierte en %C 3% BC. La codificación adecuada garantiza que el cliente MQTT se transmita correctamente en la llamada a la API basada en IDs HTTP. - CleanSession (opcional)
-
Especifica si se debe eliminar el estado de sesión del cliente al desconectarse.
true
Configúrelo para eliminar toda la información de la sesión, incluidas las suscripciones y los mensajes en cola.false
Configúrelo en para conservar el estado de la sesión. De forma predeterminada, se establece enfalse
(conserva el estado de la sesión). En las sesiones limpias, se ignorará este parámetro. - preventWillMessage (opcional)
-
Controla si AWS IoT Core envía el mensaje de última voluntad y testamento (LWT) si está disponible en el momento de la desconexión. Configúrelo en
true
para evitar el envío del mensaje LWT. Configúrelo enfalse
para permitir el envío. De forma predeterminada, está configurado enfalse
(envía LWT si está disponible).
Sintaxis de la API
La DeleteConnection
API utiliza el siguiente formato de solicitud HTTP:
DELETE /connections/<clientId>?cleanSession=<cleanSession>&preventWillMessage=<preventWillMessage> HTTP/1.1
Ejemplos de solicitudes:
// Basic disconnect (preserves session, allows LWT message) DELETE /connections/myDevice123 HTTP/1.1 // Disconnect and clear session DELETE /connections/myDevice123?cleanSession=TRUE HTTP/1.1 // Disconnect, clear session, and prevent LWT message DELETE /connections/myDevice123?cleanSession=TRUE&preventWillMessage=TRUE HTTP/1.1
Las solicitudes correctas devuelven HTTP 200 OK sin cuerpo de respuesta.
nota
El nombre del servicio que utiliza AWS Signature Version 4 para firmar las solicitudes es: iotdevicegateway. Puede encontrar su punto final mediante el comando. aws iot describe-endpoint --endpoint-type iot:Data-ATS
Permisos necesarios
Para usar la DeleteConnection
API, necesitas el siguiente permiso de IAM:
iot:DeleteConnection
Puede conceder este permiso a un cliente específico IDs mediante políticas basadas en recursos. Por ejemplo:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:DeleteConnection", "Resource": "arn:aws:iot:region:account:client/myDevice*" } ] }
Consideraciones importantes
Los clientes desconectados pueden intentar volver a conectarse inmediatamente, a menos que haya implementado una lógica adicional para impedir la reconexión. La operación de desconexión solo termina la conexión actual y no impide que una conexión se vuelva a conectar. Si necesitas impedir la reconexión, considera implementar una lógica del lado del cliente o deshabilitar la credencial de un dispositivo.
Los límites de velocidad se aplican a la API como parte de la limitación de velocidad de la API estándar. AWS IoT Core Cuando planifique las operaciones de desconexión masiva, asegúrese de tener en cuenta estos límites e implementar la lógica de reintentos y las estrategias de procesamiento por lotes adecuadas para evitar las limitaciones. Para obtener más información, consulte Puntos de conexión y cuotas de AWS IoT Core.
Respuestas de error
La DeleteConnection
API puede devolver las siguientes respuestas de error:
- InvalidRequestException
-
La solicitud no es válida. Esto puede ocurrir si el formato del ID de cliente no es válido, contiene un prefijo con el signo de dólar ($) o si faltan los parámetros necesarios.
- ResourceNotFoundException
-
El ID de cliente especificado no existe o no está conectado actualmente y no tiene una sesión persistente.
- UnauthorizedException
-
No está autorizado para realizar esta operación. Asegúrese de tener el
iot:DeleteConnection
permiso necesario. - ForbiddenException
-
La persona que llama no está autorizada a realizar la solicitud. Esto puede deberse a la insuficiencia de los permisos de IAM o a las restricciones de las políticas basadas en los recursos.
- ThrottlingException
-
El índice supera el límite. Reduzca la frecuencia de las llamadas a la API e implemente la lógica de reintentos adecuada con un retraso exponencial.
- InternalFailureException
-
Se ha producido un error inesperado. Vuelva a intentar la solicitud tras un breve retraso.
- ServiceUnavailableException
-
El servicio no está disponible temporalmente. Vuelva a intentar la solicitud tras un breve retraso.