Configurar las opciones del cliente de corredor MQTT
Importante
Para poder aplicar configuración se debe modificar el recurso de Broker. Solo se configura en la implementación inicial mediante la CLI de Azure o Azure Portal. Se requiere una nueva implementación si se necesitan cambios de configuración de agente. Para obtener más información, consulte Personalizar el agente predeterminado.
Las opciones del cliente avanzado del corredor MQTT controlan cómo interactúa el agente con clientes MQTT. Esta configuración, negociada entre el agente y el cliente durante la conexión, incluye la expiración de la sesión, la expiración del mensaje, la recepción máxima y mantener conexión. La única configuración específica de Azure IoT Operations es el límite de cola de suscriptores .
En la referencia de APIClientConfig se encuentra la lista completa de opciones de configuración disponibles.
En muchos escenarios, la configuración de cliente predeterminada es suficiente. Para invalidar la configuración de cliente predeterminada del corredor MQTT, edite la sección advanced.clients
del recurso de Broker. Actualmente, esta invalidación solo se admite si se utiliza la marca --broker-config-file
al implementar mediante Operations el comando az iot ops create
.
Para empezar, prepare un archivo de configuración de Broker en formato JSON como el del ejemplo siguiente:
{
"advanced": {
"clients": {
"maxSessionExpirySeconds": 282277,
"maxMessageExpirySeconds": 1622,
"subscriberQueueLimit": {
"length": 1000,
"strategy": "DropOldest"
},
"maxReceiveMaximum": 15000,
"maxKeepAliveSeconds": 300
}
}
}
Luego, implemente Operaciones de IoT mediante el comando az iot ops create
con la marca --broker-config-file
, como el siguiente comando (por concisión se omiten otros parámetros).
az iot ops create ... --broker-config-file <FILE>.json
Para más información, consulte compatibilidad de la CLI de Azure con la configuración avanzada del corredor MQTT y ejemplos de Broker.
Límite de cola de suscriptores
El corredor MQTT broker mantiene una cola para cada suscriptor con mensajes QoS 1 a la espera de que se entreguen. Los mensajes se agregan a esta cola cuando se reciben del publicador. Se quitan después de que el suscriptor los confirme y los entregue con un mensaje PUBACK. Si los mensajes llegan más rápido de lo que el suscriptor puede confirmar, o si el suscriptor está sin conexión con una sesión persistente, la cola puede crecer de gran tamaño.
El corredor MQTT puede almacenar en búfer estos mensajes en el disco para guardar memoria, pero es posible que esto no siempre sea suficiente. Es posible que el búfer de disco no esté configurado o que esté lleno debido a otros suscriptores. Por lo tanto, el límite de cola de suscriptores ayuda a evitar que el agente use demasiada memoria para un único suscriptor.
El límite de cola de suscriptor tiene dos valores:
Longitud: el número máximo de mensajes que se pueden poner en cola para un único suscriptor. Si la cola está llena y llega un nuevo mensaje, el agente quita el mensaje en función de la estrategia configurada.
Estrategia: estrategia que se va a usar cuando la cola está llena. Las dos estrategias son:
- Ninguno: los mensajes no se quitan a menos que expirela sesión y la cola pueda crecer indefinidamente. Este comportamiento es el predeterminado.
- DropOldest: se quita el mensaje más antiguo de la cola.
El límite solo se aplica a la cola de salida del suscriptor, que contiene mensajes a los que no se han asignado identificadores de paquetes porque la cola en curso está llena. Este límite no se aplica a la cola en curso.
Dado que el límite se aplica por partición de back-end, el corredor MQTT no puede garantizar el número total de mensajes de salida para ninguno de los suscriptores en todo el clúster. Por ejemplo, establecer la longitud en 10 000 no significa que el suscriptor reciba como máximo 10 000 mensajes. En su lugar, podría recibir hasta 10,000 * number of partitions * number of backend workers
mensajes.
Suscriptores lentos
Un suscriptor lento es aquel que no puede mantenerse al día con la tasa de mensajes entrantes. Este problema puede aparecer si el suscriptor procesa los mensajes con lentitud, está desconectado o está sin conexión. El límite de cola de suscriptores ayuda a evitar que un suscriptor lento consuma demasiada memoria.
Expiración de mensajes
La configuración de maxMessageExpirySeconds
controla cuánto tiempo puede permanecer un mensaje en la cola antes de que expire. Si algún mensaje permanece en la cola durante un periodo que supera el tiempo de expiración máximo, se marca como expirado. Sin embargo, los mensajes expirados no se descartan hasta que llegan al principio de la cola. Este mecanismo de expiración pasiva ayuda a administrar el uso de memoria asegurándose de que los mensajes antiguos se quitan finalmente.
Expiración de la sesión
La configuración de maxSessionExpirySeconds
funciona con el límite de cola de suscriptor para asegurarse de que los mensajes no se mantienen en la cola indefinidamente. Si una sesión expira, se quitan todos los mensajes de la cola de esa sesión. Esta práctica ayuda a evitar que los suscriptores sin conexión usen demasiada memoria, ya que borra la cola completa.
Tanto la expiración del mensaje como la expiración de la sesión son importantes para administrar suscriptores lentos y sin conexión y garantizar un uso eficaz de la memoria.