Giovedì 29 ottobre 2026
L’edizione di oggi
Millebit
AI · Software · QA
Il segnale, non il rumore.

Gli articoli di Millebit sono scritti con l’intelligenza artificiale a partire da fonti citate in ogni pezzo. Come lavoriamo

Sviluppo software

Trattare MQTT come una coda ha fatto perdere dati di oltre 200 dispositivi

Testo scritto con l’intelligenza artificiale a partire da una fonte citata, senza revisione umana prima della pubblicazione.

Un worker riavviato ha causato 40 secondi di perdita di messaggi: MQTT è pub/sub leggero e non conserva per default i messaggi per client disconnessi.

Illustrazione generata con l’intelligenza artificiale

Un deploy ha riavviato un worker Python per 40 secondi. In quel tempo sono spariti i messaggi di oltre 200 dispositivi. Nessun errore a log, nessuna dead letter, solo dati persi1.

Il team aveva scambiato il broker MQTT per un sistema tipo RabbitMQ. I dispositivi pubblicavano dati di sensori. Un solo worker si sottoscriveva e scriveva nel database. Finché il worker restava online, tutto ok. Al riavvio, la sottoscrizione si è interrotta e il broker non ha conservato nulla1.

Il punto tecnico è chiaro: MQTT non è una coda. È un protocollo publish/subscribe leggero. Il broker inoltra i messaggi ai client sottoscritti in quel momento. Se nessuno è in ascolto, quei messaggi non vengono consegnati. Il livello QoS non cambia questo fatto. QoS 0, 1 o 2 gestisce l’affidabilità della consegna sul tratto publisher-broker o broker-subscriber. Non crea una coda per chi è offline. La persistenza durante una disconnessione dipende solo dalla sessione: con clean_session=true in MQTT 3.1.1 il broker elimina le subscription alla disconnessione; in MQTT 5 clean_start=true con session expiry impostata a 0 ha lo stesso effetto. Per mantenere gli arretrati serve una sessione che sopravvive: ad esempio, clean_session=false in 3.1.1 oppure, in 5, clean_start=false e session expiry maggiore di 01.

Qui nasce l’errore operativo. In sistemi come Kafka o RabbitMQ i messaggi restano nel log o in coda finché un consumer li legge. Con MQTT no: non esiste una coda centrale che trattiene i messaggi per impostazione predefinita. Se serve un comportamento simile, bisogna configurare la sessione perché duri oltre la disconnessione e capire i limiti della soluzione. Altrimenti basta un riavvio breve per perdere dati di sensori, come è accaduto1.

QoS non risolve il problema della disconnessione. Un messaggio può avere QoS 1 o 2 e arrivare al broker in modo affidabile, ma svanire se il subscriber non ha una sessione persistente. Alla riconnessione il client riparte pulito, senza arretrati, se la sessione è stata cancellata. In produzione questo si traduce in buchi silenziosi: nessun errore, nessuna coda di rientro, solo misure mancanti1.

Il caso raccontato è uno di vari incidenti simili. L’insegnamento è di progettazione, non di tuning a fine corsa. Prima di mandare in produzione, bisogna fissare le regole di sopravvivenza della sessione e verificarle con test di riavvio e perdita di connettività. Se la pipeline dipende da un solo worker, il rischio di perdere dati resta alto1.

Checklist operativa, subito:

  • Verificare le opzioni di sessione del client: clean_session su MQTT 3.1.1; in MQTT 5 controllare clean_start e session expiry1.
  • Impostare una sessione persistente quando servono arretrati: 3.1.1 con clean_session=false; 5 con clean_start=false e session expiry > 01.
  • Ricordare il perimetro del QoS: migliora la consegna sul tratto, non conserva messaggi per client offline1.

Un test semplice aiuta: simulare un riavvio di 1 minuto del consumer in staging e verificare se, alla ripartenza, riceve i messaggi pubblicati durante l’assenza. Se non accade, la sessione non persiste come pensate1.

Fonti

  1. MQTT Is Not a Message Queue: QoS, Persistent Sessions and Shared Subscriptions Without Losing Data dev.to · 29 ottobre 2026
Come è nato questo articolo Scritto da un sistema di intelligenza artificiale, con controlli automatici

Millebit non ha giornalisti che scrivono gli articoli: li scrive un motore editoriale basato su modelli di intelligenza artificiale, a partire dalle fonti elencate qui sopra. Prima di uscire, ogni testo passa questi controlli:

  • Fedeltà alle fonti. Un secondo passaggio toglie ogni affermazione che le fonti non sostengono. Valutazione su questo pezzo: 9,5/10.
  • Anti-cliché. Un filtro scarta frasi fatte, enfasi e tic della prosa artificiale: superato.
  • Giudizio editoriale. Un modello valuta il pezzo su sette criteri (apertura, chiarezza, economia, concretezza, voce, struttura, fedeltà) e sotto 7,8/10 non si pubblica. Questo articolo ha preso 8,6/10 dopo 1 revisione.

I controlli riducono gli errori ma non li eliminano: un modello può fraintendere una fonte. Per le decisioni importanti, risali alla fonte originale. Se trovi un errore, segnalacelo.

Come funziona Millebit, nel dettaglio →

Hai trovato un errore? Segnalacelo
Tipo di segnalazione

Leggiamo ogni segnalazione. Le correzioni fatte sono elencate in Correzioni. L’email, se la lasci, serve solo a risponderti.