Czy istnieje sposób na zachowanie poziomu QoS MQTT, dopóki nie dotrze on do klienta?

9

MQTT pozwala nadawcom ustawić poziom jakości usługi (QoS), który zapewnia pewne gwarancje dotyczące tego, czy wiadomość zostanie odebrana (i czy dozwolone są duplikaty). W tym artykule z HiveMQ podkreślono problem obniżenia poziomu , w którym klient o niższym poziomie QoS nie otrzyma wiadomości z gwarancjami, o które poprosił nadawca:

Jak już wspomniano, przepływy QoS między klientem publikującym a subskrybującym to dwie różne rzeczy, a QoS może być inna. Oznacza to, że poziom QoS może różnić się od klienta A, który publikuje wiadomość, i klienta B, który odbiera opublikowaną wiadomość. QoS między nadawcą a brokerem jest definiowany przez nadawcę. Gdy broker wysyła komunikat do wszystkich subskrybentów, używana jest QoS subskrypcji od klienta B.

Czy MQTT zapewnia sposób wskazania, że ​​to obniżenie wersji jest niedopuszczalne i że wiadomość musi zostać dostarczona przy użyciu żądanej QoS pierwotnego nadawcy? Czy jedyną opcją jest upewnienie się, że zarówno nadawca, jak i odbiorca mają żądane ustawienie QoS przed przesłaniem wiadomości?

Aurora0001
źródło

Odpowiedzi:

8

Podczas pracy z MQTT należy pamiętać, że „zarówno subskrybenci, jak i wydawcy są uważani za klientów MQTT”.

Jak wspomniano QoS ustawiony podczas publikowania jest całkowicie powiązany z brokerem (B), a nie innymi klientami. Aby więc upewnić się, że subskrybent (S) otrzymuje wszystko, co wydawca (P) publikuje, należy użyć QoS 1.

Spójrzmy na przypadki: P - wysyła z QoS 0, co oznacza, że ​​każda wiadomość będzie raz w B atmost (raz lub zero). W takim przypadku, jeśli S subskrybuje B z QoS 0 - nie ma gwarancji, że nawet gdy broker (B) otrzyma komunikat, który w końcu osiągnie S. QoS 1 - S na pewno odbierze QoS 2 - S nie otrzyma wielu wiadomości, podczas gdy broker może

Jeśli zrobimy to samo z innymi QoS. Poznamy QoS1, ponieważ subskrybenci działają dobrze na wszystkich poziomach, ponieważ QoS 1 jest nadzbiorem wszystkich.


MQTT nie podaje żadnych wskazówek na to samo, ale możemy osiągnąć QoS nadawcy, używając QoS 1 podczas subskrybowania.

brawokeyl
źródło
4

Poziomy QoS 1 lub 2 zapewniają tylko, że opublikowana wiadomość dotarła do brokera. Subskrybent QoS 1 lub 2 zapewnia brokerowi, że wiadomość została odebrana.

Publikowanie z 1 lub 2 nie oznacza, że ​​ktoś słucha.

Jaki jest twój przypadek użycia?

fixitchris
źródło
3
Nie zadawaj pytań w odpowiedziach. Jeśli coś nie jest jasne, najpierw zostaw komentarz.
Bence Kaulics,
Jestem ciekawy każdej sytuacji, w której czujnik może wysyłać dane do brokera wiadomości, a następnie być przesyłany do komputera lub innego procesora, w którym ważne jest zachowanie gwarancji QoS.
Aurora0001