Pianificazione della distribuzione - Opzioni MQTT avanzate

Le opzioni MQTT avanzate controllano il modo in cui il broker MQTT interagisce con i client. Queste impostazioni vengono negoziate tra il broker e il client in fase di connessione e includono la scadenza della sessione, la scadenza del messaggio, la ricezione massima e la conservazione attiva. L'unica impostazione specifica di Operazioni di Azure IoT è il limite della coda del sottoscrittore. Decidere prima della distribuzione se è necessario personalizzare queste opzioni.

Importante

Queste opzioni possono essere configurate solo durante la distribuzione iniziale, usando il interfaccia della riga di comando di Azure o il portale di Azure. Per modificarle successivamente, è necessario ridistribuirle. Per altre informazioni, vedere Personalizzare Broker predefinito.

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 eccezione è supportata solo utilizzando l'opzione --broker-config-file quando si distribuisce IoT Operations tramite il comando az iot ops create. Per altre informazioni, vedere Supporto dell'interfaccia della riga di comando di Azure per la configurazione avanzata del broker MQTT.

Per l'elenco completo delle impostazioni disponibili, vedere le informazioni di riferimento sull'API ClientConfig .

Per iniziare, preparare un Broker file di configurazione in formato JSON. Per esempio:

{
  "advanced": {
    "clients": {
      "maxSessionExpirySeconds": 282277,
      "maxMessageExpirySeconds": 1622,
      "subscriberQueueLimit": {
        "length": 1000,
        "strategy": "DropOldest"
      },
      "maxReceiveMaximum": 15000,
      "maxKeepAliveSeconds": 300,
      "maxPacketSizeBytes": 1048576
    }
  }
}

Quindi, distribuisci IoT Operations utilizzando il comando az iot ops create con il flag --broker-config-file. Altri parametri vengono omessi per brevità:

az iot ops create ... --broker-config-file <FILE>.json

Dimensione massima del pacchetto

L'impostazione maxPacketSizeBytes controlla il pacchetto MQTT più grande che il broker accetta da un cliente. Il broker pubblicizza questo valore ai clienti MQTT v5 come la Maximum Packet Size proprietà presente nel pacchetto CONNACK. Il broker disconnette i clienti che inviano pacchetti più grandi.

Il profilo di memoria stabilisce un limite superiore per questo valore. Se imposti maxPacketSizeBytes un valore superiore a quello consentito dal profilo di memoria, il broker usa invece il valore del profilo di memoria. Usa questa impostazione per limitare le dimensioni dei pacchetti oltre al profilo di memoria, ad esempio per proteggere la memoria in una distribuzione che gestisce solo piccoli messaggi di telemetria.

Limite della coda dell'abbonato

Il broker MQTT mantiene una coda per ogni sottoscrittore contenente i messaggi QoS 1 (consegna almeno una volta) in attesa di essere recapitati. 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ù rapidamente di quanto il sottoscrittore riesca a confermarne la ricezione, oppure se il sottoscrittore è offline con una sessione persistente, la coda può diventare molto grande.

Il broker MQTT può memorizzare i messaggi nel buffer su disco per risparmiare memoria, ma il buffering del disco non è sempre disponibile. Il buffer del disco potrebbe non essere configurato o potrebbe essere già pieno a causa di altri sottoscrittori. Il limite di coda del sottoscrittore impedisce a un singolo sottoscrittore di consumare una quantità eccessiva di memoria broker.

Il limite della coda del sottoscrittore ha due impostazioni:

  • Lunghezza massima: Il numero massimo di messaggi che possono essere accodati per ciascun sottoscrittore. Se la coda è piena e arriva un nuovo messaggio, il broker elimina un messaggio in base alla strategia configurata.

  • Strategia: comportamento del broker quando la coda è piena:

    • Nessuno (impostazione predefinita): i messaggi non vengono eliminati. La coda può aumentare fino alla scadenza della sessione.
    • DropOldest: il broker elimina il messaggio meno recente nella coda per liberare spazio per il nuovo.

Note

Il limite della coda del sottoscrittore si applica alla coda in uscita, ossia ai messaggi in attesa di essere inviati al sottoscrittore. La coda in transito (messaggi inviati ma non ancora confermati dal sottoscrittore) è separata ed è regolata dall'impostazione MQTT del massimo di ricezione.

Importante

Nelle distribuzioni a più partizioni, il numero di code si adatta a ogni partizione. Ogni partizione gestisce le proprie code di sottoscrittori in modo indipendente. La memoria totale a livello di cluster utilizzata dalle code di un singolo sottoscrittore può superare ciò che suggerisce un singolo limite configurato. Pianificare la capacità di memoria di conseguenza per le distribuzioni con più partizioni.

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 resta in coda per più di maxMessageExpirySeconds, scade. Il broker non elimina attivamente i messaggi scaduti, li elimina quando raggiungono la parte anteriore della coda. Questa pulizia passiva mantiene il limite di utilizzo della memoria senza analizzare la coda.

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, il broker elimina tutti i messaggi nella coda per tale sessione. La scadenza della sessione impedisce ai sottoscrittori offline di consumare memoria illimitatamente cancellando l'intera coda.

Numero massimo di messaggi scaduti e conservati

In MQTT 5 i messaggi conservati rispettano l'intervallo di scadenza del PUBLISH messaggio specificato nel pacchetto. Se viene impostato un intervallo di scadenza, il messaggio conservato viene rimosso al termine dell'intervallo. Se non viene specificato alcun intervallo, il messaggio rimane disponibile per un periodo illimitato.

L'impostazione maxMessageExpirySeconds definisce un limite superiore globale per la scadenza del messaggio, applicando a tutti i messaggi, inclusi quelli conservati. Ad esempio, se maxMessageExpirySeconds è impostato su 1000 secondi e un messaggio conservato specifica un intervallo di scadenza di 2000 secondi, il messaggio viene comunque rimosso dopo 1000 secondi.

Per impostazione predefinita, maxMessageExpirySeconds non è impostato. In questo caso, i messaggi conservati non scadono a meno che non venga definito in modo esplicito un intervallo di scadenza nel messaggio.

Passaggi successivi