Apakah ada cara untuk mempertahankan level QoS MQTT sampai mencapai klien?

9

MQTT memungkinkan pengirim untuk menetapkan tingkat Kualitas Layanan (QoS), yang memberikan jaminan tertentu tentang apakah pesan akan diterima (dan apakah duplikat diizinkan). Artikel dari HiveMQ ini menyoroti masalah penurunan peringkat , di mana klien dengan tingkat QoS yang lebih rendah tidak akan menerima pesan dengan jaminan yang diminta pengirim:

Seperti yang sudah dikatakan, aliran QoS antara klien penerbitan dan pelanggan adalah dua hal yang berbeda dan QoS dapat berbeda. Itu berarti tingkat QoS dapat berbeda dari klien A, yang mempublikasikan pesan, dan klien B, yang menerima pesan yang diterbitkan. Antara pengirim dan broker QoS ditentukan oleh pengirim. Ketika broker mengirim pesan ke semua pelanggan, QoS langganan dari klien B digunakan.

Apakah MQTT memberikan cara untuk menunjukkan bahwa penurunan versi ini tidak dapat diterima, dan bahwa pesan harus dikirim menggunakan QoS yang diminta pengirim asli? Apakah satu-satunya pilihan untuk memastikan bahwa pengirim dan penerima memiliki pengaturan QoS yang diinginkan sebelum mengirimkan pesan?

Aurora0001
sumber

Jawaban:

8

Satu hal yang perlu diingat ketika bekerja dengan MQTT adalah bahwa "baik pelanggan dan penerbit dianggap sebagai klien MQTT".

Seperti yang dikatakan QoS saat penerbitan sepenuhnya terkait dengan broker (B) bukan klien lain. Jadi untuk memastikan bahwa pelanggan (S) menerima semua yang diterbitkan penerbit, Anda harus menggunakan QoS 1.

Mari kita lihat kasus: P - mengirim dengan QoS 0 yang berarti bahwa setiap pesan akan berada di B paling banyak sekali (satu kali atau nol). Dalam hal ini jika S berlangganan B dengan QoS 0 - tidak ada jaminan bahwa bahkan ketika broker (B) menerima pesan yang akhirnya akan mencapai S. QoS 1 - S pasti akan menerima QoS 2 - S tidak akan menerima banyak pesan sementara broker bisa

Jika kita melakukan hal yang sama dengan QoS lainnya. Kita akan mengenal QoS1 karena pelanggan bekerja dengan baik dengan semua level karena QoS 1 adalah superset dari semua.


MQTT tidak memberikan indikasi yang sama tetapi kami dapat mencapai QoS pengirim dengan menggunakan QoS 1 saat berlangganan.

bravokeyl
sumber
4

QoS 1 atau 2 level hanya memastikan bahwa pesan yang diterbitkan tiba di broker. Pelanggan QoS 1 atau 2 meyakinkan broker bahwa pesan telah diterima.

Menerbitkan dengan 1 atau 2 tidak berarti siapa pun mendengarkan.

Apa kasus penggunaan Anda?

fixitchris
sumber
3
Jangan bertanya dalam jawaban. Jika ada sesuatu yang tidak jelas, tinggalkan komentar terlebih dahulu.
Bence Kaulics
Saya ingin tahu tentang situasi di mana Anda mungkin memiliki sensor mengirim data ke broker pesan, kemudian diteruskan ke komputer atau prosesor lain di mana sangat penting bahwa jaminan QoS disimpan.
Aurora0001