-
Notifications
You must be signed in to change notification settings - Fork 43
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
stimav4: RPC reponse arrive before RPC is completed #439
Comments
@digitecomg mi confermi che il problema è stato risolto ? |
C'erano due diverse problematiche se ricordi e ne abbiamo parlato a voce, alla quale ne aggiungo una io adesso. La prima riguardava la non risposta di eventuali RPC messe in coda, risolta con appunto un buffer delle risposte, la seconda rimasta in sospeso sulla vera efficacia di una risposta solo al termine della RPC. Per esempio il download Dati se di lunga durata si può avere una risposta molto tardiva, oltre il tempo di validità della RPC. Questa risposta è un'assicurazione della presa in carico della richiesta. Alcune richieste come download del firmware devono interrompere il task di gestione mqtt per tornare a quello http e/o fare altre operazioni anche di lunga durata. Si deve ristabilire la connessione MQTT volutamente chiusa e/o chiusa per timeout dal server per comunicare il risultato della RPC. La risposta nella successiva connessione, se già disponibile, non fa altro che allungare i tempi dell'operatore che attende l'esecuzione della stessa e la conferma al server, unico strumento possibile di verifica dell'operatore. |
il ritardo della conferma io non lo vedo come un problema, ma come una certezza che l'operazione è stata completata con successo. Il monitoraggio sul server non ha timeout, ma solo una procedura di manutenzione per il purge di trasazioni in sospeso. Comunque risolto il problema delle RPC senza risposta, questo lo si può ritenere un miglioramento.
"dopo il messaggio" suppongo sia "dopo l'invio del primo messaggio"
Questo è un problema, però ora ho testato e funziona. Sto cercando di trovare una versione del broker funzionante ... |
A volte le RPC arrivano dopo il messaggio disconnect |
https://www.hivemq.com/blog/mqtt-essentials-part-7-persistent-session-queuing-messages/ Alcune connessioni durano meno di 10 secondi e forse non è sufficiente per avere risposta dal DB del broker.
delle solo Stima V4 questo è un esempio delle tempistiche di connessione di TUTTE le stazioni (a cui vanno aggiunte le stima V3:
in circa un minuto avviene l'invio di tutti i dati di tutte le stazioni. Era previsto un tempo random di ritardo per la connessione al server; quanto vale ?
|
Non mi sembra una soluzione molto informatica... però può senz'altro funzionare. |
MQTT è asincrono e da uno a molti quindi questo non è possibile ne con la versione 3 e nemmeno con la versione 5 (per quanto mi è dato si sapere).
Come dicevo questo non è possibile con la logica asincrona di MQTT salvo inventare stratagemmi.
Io suggerisco se non troppo onero di impostare il tempo minimo di connessione a 30 secondi. Solo se non funziona possiamo provare a portare il ritardo random di invio a 120 secondi. Come ultima possibilità possiamo anche inventare un metodo più deterministico, più complesso e forse energicamente non troppo conveniente quale per ogni stazione avere un messaggio con lo stato delle RPC ma essendo anche questa una comunicazione asincrona mi pare più creatore di problemi che risolutore. Una sequenza potrebbe essere:
mi pare comunque complesso e cercherei di evitarlo; ho attualmete attivo un test che ogni minuto verifica le funzionalità delle sessioni persistenti e con un tempo di connessione di 20 secondi non ho mai messaggi persi. |
Ho provato ad inserire 15 secondi come minima connessione (quando tutto funziona nella mia stazione di test ci mette 2/3 secondi ad inviare i dati). 15 secondi è un tempo abbastanza lungo di attesa per la risposta server, poi posso allungarlo. |
Segnalo di aver consigliato 30 secondi e non 15 come tempo minimo di connessione, con possibilità di ridurlo successivamente. Questo perchè 30 secondi sono testati continuamente: dimezzare il tempo non è la stessa cosa.
e queste una serie di risposte:
Se vogliamo risolvere il problema la segnalazione ricevuta non è sufficiente.
Qui riporto un semplice scrip bash per effettuare un test del broker mqtt cat check_broker
eseguire: ovviamente tutti i parametri devono essere corretti se lo script torna $? == 0 tutto ha funzionato |
aggiungo tutte le RPC inviate il giorno 29 e ricevute tramite il broker:
e queste le risposte sempre del giorno 29:
|
Le prime che ho mandato erano senza consegna del messaggio (ero anche in ascolto su monitor MQTT), poi ad un certo punto poco dopo che ho inviato il messaggio su GitHub circa 10' (il messaggio dei 15 secondi), è arrivata la prima RPC (37 secondi dopo la connessione), avevo impostato 40 per fare vari tentativi. |
Non mi pare correlato ma ho rimosso un limite che imponeva un massimo di 2 messaggi accodati per ogni stazione. |
OK |
a success response is sended by station before rpc completation so we can have
The text was updated successfully, but these errors were encountered: