Configurar las opciones del cliente de corredor MQTT
Importante
Esta configuración requiere modificar el recurso de Broker y solo se puede configurar en el momento de 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 avanzadas de cliente del agente controlan cómo interactúa el agente con los 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 .
La lista completa de opciones de configuración disponibles se encuentra en referencia de APIClientConfig.
En muchos escenarios, la configuración de cliente predeterminada es suficiente. Para invalidar la configuración de cliente predeterminada para el agente, edite la sección advanced.clients
del recurso Broker. Actualmente, esta invalidación solo se admite mediante la --broker-config-file
marca al implementar las operaciones de Azure IoT mediante el comando az iot ops create
.
Para empezar, prepare un archivo de configuración de Broker en formato JSON, como en el ejemplo siguiente:
{
"advanced": {
"clients": {
"maxSessionExpirySeconds": 282277,
"maxMessageExpirySeconds": 1622,
"subscriberQueueLimit": {
"length": 1000,
"strategy": "DropOldest"
},
"maxReceiveMaximum": 15000,
"maxKeepAliveSeconds": 300
}
}
}
A continuación, implemente Operaciones de IoT de Azure mediante el az iot ops create
comando con la marca--broker-config-file
, como el siguiente comando (se omiten otros parámetros para mayor brevedad):
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 y se quitan una vez entregados y confirmados por el suscriptor con 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 agente 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 es el comportamiento predeterminado.
DropOldest: se quita el mensaje más antiguo de la cola.
El límite solo se aplica a la cola saliente del suscriptor, que contiene mensajes 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 agente no puede garantizar el número total de mensajes salientes para un suscriptor 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. Esto puede ocurrir si el suscriptor procesa mensajes lentamente, 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 un mensaje permanece en la cola durante más tiempo que el tiempo de expiración máximo, se marca como expirado. Sin embargo, los mensajes expirados solo se descartan cuando 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. Esto ayuda a evitar que los suscriptores sin conexión usen demasiada memoria borrando 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.