MQTT: ¿qué es "QoS" (calidad de servicio) y cómo funciona?

3 minutos de lectura

Logotipo de MQTT

La llamada calidad de servicio (en pocas palabras, QoS) es una de las características más importantes de proprotocolo MQTT. la calidad de servicio se entiende como el grado de precisión en la entrega de mensajes MQTT entre remitentes y el corredor y el corredor y suscriptores, o la precisión que define la garantía de una entrega efectiva y exitosa de dichos mensajes.

Hay tres niveles de servicio QoS:

  • A lo sumo una vez (Nivel 0)
  • Al menos una vez (Nivel 1)
  • Exactamente una vez (Nivel 2)

QoS MQTT está básicamente preocupado las dos fases de entrega de un mensaje enviado por un cliente remitente y recibido por un cliente suscriptor:

  • envío del remitente al corredor;
  • envío del corredor al destinatario final.

En la primera fase el remitente decide el nivel de QoS asociado con el mensaje y lo envía al corredor; en el segundo, el agente a su vez entrega ese mensaje a todos los clientes que tienen una suscripción para ese mensaje utilizando el mismo nivel de QoS, a menos que los suscriptores del cliente no tengan provi el registro indicando un nivel de QoS más bajo. En este caso, el corredor activará el mensaje con un nivel de QoS más bajo.

La calidad del servicio es muy importante porque permite al remitente elegir el nivel de servicio basado en la calidad y la lógica de la red applicativa. A continuación vemos las diversas diferencias.

QoS 0

El nivel mínimo para QoS es cero. Es un nivel concebido para un rendimiento máximo con un esfuerzo mínimo: en este escenario no hay garantía de entrega. El remitente envía al corredor y olvídalo, tampoco espera respuesta prove un posible reenvío. Para decirlo simple, como va, va.

QoS 1

En este escenario, el remitente (quién es el que envía el mensaje inicial al intermediario, o es el intermediario mismo quien envía un mensaje al receptor final) mantiene el mensaje en la memoria hasta que reciba del destinatario el ok de recibo ocurrió. Si no lo recibe dentro de un tiempo razonable, lo envía nuevamente, una segunda vez, y espera nuevamente una respuesta, y así sucesivamente. El uso de QoS 1, por lo tanto, podría ocurrir múltiples entregas del mismo mensaje. Cuando, de hecho, el corredor recibe un mensaje marcado con QoS 1 provvede inmediatamente para entregarlo a los suscriptores de ese mensaje y, a continuación respuestas "hecho"Al remitente; Si el tiempo entre el envío y la recepción del paquete de confirmación es demasiado largo (por ejemplo, en redes congestionadas), el remitente envía el mensaje nuevamente, activando toda la cadena nuevamente y provocando el envío duplicado.

QoS 2

Este es el modo más lento pero también más confiable: en esencia el proesto implica un doble rebote entre el remitente y el destinatario para confirmar al remitente la toma real del mensaje y, por lo tanto, la cancelación de un posible reenvío. Esto garantiza que el mensaje llegue exactamente una y solo una vez, pero obviamente es más costoso (mínimamente) para los sistemas, la red y el tiempo.

Cual es el mejor?
Obviamente no hay una respuesta única. Depende, como sucede a menudo, del escenario de appde la protocollo MQTT, que está diseñado para comunicaciones ligeras y rápidas, pero su configuración en términos de QoS debe calibrarse cuidadosamente de acuerdo con el área de uso.

Recomendamos QoS 0 cuando:

  • La conexión de red entre los clientes y el corredor es confiable, rápida y estable. Trivialmente, cuando se usa una conexión de cable;
  • no es un proproblema si se pierde algún mensaje;
  • No es necesario utilizar la cola de mensajes y las sesiones persistentes.

Recomendamos QoS 1 cuando:

  • la conexión de red a veces puede ser inestable, como en el caso de Wi-Fi hogar;
  • no es un proproblema para eventualmente recibir mensajes duplicados;
  • No es posible soportar la sobrecarga dada por QoS 2.

Finalmente, recomendamos QoS 2 cuando è crítico el hecho de garantizar siempre una y solo una entrega por cada mensaje

en domótica personal - puede que ya lo hayas descubierto por ti mismo - la QoS recomendada es 1, ya que generalmente la recepción (aunque rara) de mensajes duplicados no suele causar proproblemas de cualquier tipo. Imaginemos un tema como el siguiente:

CMND /Tasmota/ POWER 1

que generalmente controla un actuador equipado con firmware Tasmota para apagar el relé. Tal vez sería un prosi el actuador recibió el mismo mensaje dos veces seguidas? Ciertamente no. En cambio, sería el hecho de no recibirlo, lo que podría suceder si usa QoS 0.

Obviamente hay excepciones: por ejemplo, en el caso de un Sistema de alarma MQTT Es recomendable utilizar QoS 2, ya que es concebible que sea más apropiadoprorecibir comandos único y segurosiempre

Cómo configurar MQTT en los dispositivos del proprimera domótica