Configurare le opzioni del client MQTT broker
Importante
Per questa impostazione è necessario modificare la risorsa Broker. Viene configurato solo durante la distribuzione iniziale usando l'interfaccia della riga di comando di Azure o il portale di Azure. Se sono necessarie modifiche alla configurazione di Broker, è necessaria una nuova distribuzione. Per altre informazioni, vedere Personalizzare Broker predefinito.
Le opzioni avanzate del broker MQTT controllano il modo in cui il broker interagisce con i client MQTT. Queste impostazioni, negoziate tra il broker e il client durante la connessione, includono la scadenza della sessione, la scadenza del messaggio, la ricezione massima e la conservazione attiva. L'unica impostazione specifica per Le operazioni IoT di Azure è il limite di coda del sottoscrittore.
Per l'elenco completo delle impostazioni disponibili, vedere le informazioni di riferimento sull'API ClientConfig .
In molti scenari, le impostazioni client predefinite sono sufficienti. Per eseguire l'override delle impostazioni client predefinite per il broker MQTT, modificare la advanced.clients
sezione nella risorsa Broker. Attualmente, questa override è supportata solo usando il --broker-config-file
flag quando si distribuiscono operazioni IoT usando il az iot ops create
comando .
Per iniziare, preparare un file di configurazione broker in formato JSON, come nell'esempio seguente:
{
"advanced": {
"clients": {
"maxSessionExpirySeconds": 282277,
"maxMessageExpirySeconds": 1622,
"subscriberQueueLimit": {
"length": 1000,
"strategy": "DropOldest"
},
"maxReceiveMaximum": 15000,
"maxKeepAliveSeconds": 300
}
}
}
Distribuire quindi operazioni IoT usando il az iot ops create
comando con il --broker-config-file
flag , come il comando seguente. Altri parametri vengono omessi per brevità.
az iot ops create ... --broker-config-file <FILE>.json
Per altre informazioni, vedere Supporto dell'interfaccia della riga di comando di Azure per esempi avanzati di configurazione broker MQTT e Broker.
Limite della coda del Sottoscrittore
Il broker MQTT mantiene una coda per ogni sottoscrittore con messaggi QoS 1 in attesa di recapito. I messaggi vengono aggiunti a questa coda quando vengono ricevuti dall'editore. Vengono rimossi dopo che sono stati recapitati e riconosciuti dal sottoscrittore con un messaggio PUBACK. Se i messaggi arrivano più velocemente del sottoscrittore possono riconoscerli o se il sottoscrittore è offline con una sessione persistente, la coda può aumentare di dimensioni elevate.
Il broker MQTT può memorizzare questi messaggi su disco per risparmiare memoria, ma questa tattica potrebbe non essere sempre sufficiente. Il buffer del disco potrebbe non essere configurato o potrebbe essere pieno a causa di altri sottoscrittori. Pertanto, il limite di coda del sottoscrittore consente di impedire al broker di usare troppa memoria per un singolo sottoscrittore.
Il limite della coda del sottoscrittore ha due impostazioni:
Lunghezza: numero massimo di messaggi che possono essere accodati per un singolo sottoscrittore. Se la coda è piena e arriva un nuovo messaggio, il broker elimina il messaggio in base alla strategia configurata.
Strategia: strategia da usare quando la coda è piena. Le due strategie sono:
- Nessuno: i messaggi non vengono eliminati a meno che la sessione non scada e la coda può aumentare a tempo indefinito. Questo è il comportamento predefinito.
- DropOldest: il messaggio meno recente nella coda viene eliminato.
Il limite si applica solo alla coda in uscita del sottoscrittore, che contiene i messaggi che non sono stati assegnati ID pacchetto perché la coda in anteprima è piena. Questo limite non si applica alla coda in anteprima.
Poiché il limite viene applicato per partizione back-end, il broker MQTT non può garantire il numero totale di messaggi in uscita per un sottoscrittore nell'intero cluster. Se ad esempio si imposta la lunghezza su 10.000, il sottoscrittore non riceve al massimo 10.000 messaggi. Potrebbe invece ricevere fino ai 10,000 * number of partitions * number of backend workers
messaggi.
Sottoscrittori lenti
Un sottoscrittore lento è uno che non riesce a tenere il passo con la frequenza dei messaggi in arrivo. Questo problema può verificarsi se il sottoscrittore elabora i messaggi lentamente, è disconnesso o è offline. Il limite di coda del sottoscrittore consente di impedire a un sottoscrittore lento di consumare troppa memoria.
Scadenza del messaggio
L'impostazione maxMessageExpirySeconds
controlla per quanto tempo un messaggio può rimanere nella coda prima della scadenza. Se un messaggio rimane nella coda più lungo del tempo massimo di scadenza, viene contrassegnato come scaduto. Tuttavia, i messaggi scaduti vengono eliminati solo quando raggiungono l'inizio della coda. Questo meccanismo di scadenza passivo consente di gestire l'utilizzo della memoria assicurandosi che i messaggi precedenti vengano infine rimossi.
Scadenza sessione
L'impostazione maxSessionExpirySeconds
funziona con il limite di coda del sottoscrittore per garantire che i messaggi non vengano mantenuti nella coda per un periodo illimitato. Se una sessione scade, tutti i messaggi nella coda per tale sessione vengono eliminati. Questa procedura consente di impedire ai sottoscrittori offline di usare una quantità eccessiva di memoria cancellando l'intera coda.
Sia la scadenza dei messaggi che la scadenza della sessione sono importanti per la gestione dei sottoscrittori lenti e offline e per garantire un utilizzo efficiente della memoria.