C'è un modo per preservare il livello QoS MQTT fino a raggiungere il client?


9

MQTT consente ai mittenti di impostare un livello di qualità del servizio (QoS), che fornisce determinate garanzie sulla ricezione di un messaggio (e se i duplicati sono consentiti). Questo articolo di HiveMQ evidenzia il problema del downgrade , in cui un client con un livello di QoS inferiore non riceverà il messaggio con le garanzie che il mittente ha richiesto:

Come già detto, i flussi di QoS tra un client di pubblicazione e di sottoscrizione sono due cose diverse, così come il QoS può essere diverso. Ciò significa che il livello QoS può essere diverso dal client A, che pubblica un messaggio, e dal client B, che riceve il messaggio pubblicato. Tra il mittente e il broker il QoS è definito dal mittente. Quando il broker invia il messaggio a tutti gli abbonati, viene utilizzato il QoS dell'abbonamento dal client B.

MQTT fornisce un modo per indicare che questo downgrade non è accettabile e che il messaggio deve essere recapitato utilizzando il QoS richiesto dal mittente originale? È l'unica opzione per assicurarsi che sia il mittente che il destinatario dispongano dell'impostazione QoS desiderata prima di trasmettere il messaggio?

Risposte:


8

Una cosa da ricordare quando si lavora con MQTT è che "sia gli abbonati che i publisher sono considerati clienti MQTT".

Come detto, QoS impostato durante la pubblicazione è interamente correlato al broker (B) e non agli altri client. Quindi, per garantire che l'abbonato (S) stia ricevendo tutto ciò che l'editore (P) sta pubblicando, è necessario utilizzare QoS 1.

Diamo un'occhiata ai casi: P: invia con QoS 0, il che significa che ogni messaggio sarà al massimo B una volta (una volta o zero). In questo caso, se S sottoscrive B con QoS 0, non esiste alcuna garanzia che anche quando il broker (B) riceve un messaggio che raggiungerà infine S. QoS 1 - S riceverà sicuramente QoS 2 - S non riceverà più messaggi mentre il broker può farlo

Se facciamo lo stesso con altri QoS. Conosceremo QoS1 per gli abbonati che funziona bene con tutti i livelli poiché QoS 1 è il superset di tutti.


MQTT non fornisce alcuna indicazione per lo stesso, ma possiamo ottenere la QoS del mittente utilizzando QoS 1 durante la sottoscrizione.


4

I livelli QoS 1 o 2 assicurano solo che il messaggio pubblicato sia arrivato al broker. L'utente QoS 1 o 2 assicura al broker che il messaggio è stato ricevuto.

Pubblicare con 1 o 2 non significa che qualcuno stia ascoltando.

Qual è il tuo caso d'uso?


3
Non porre domande nelle risposte. Se qualcosa non è chiaro lascia prima un commento.
Bence Kaulics,

Sono curioso di sapere qual è la situazione in cui potresti avere un sensore che invia i dati al broker dei messaggi, per poi essere inoltrato a un computer o qualche altro processore in cui è fondamentale mantenere le garanzie QoS.
Aurora0001
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.