Daftar blog HiveMQ di bawah "praktik terbaik" untuk tidak berlangganan wildcard multi-level ketika mencoba untuk membuang semua pesan ke database. Mereka mengklaim bahwa klien yang berlangganan mungkin tidak dapat mengikuti banyak pesan dan mengusulkan untuk menggunakan plugin broker untuk langsung menghubungkan ke aliran pesan saja.
Kadang-kadang perlu untuk berlangganan semua pesan, yang ditransfer melalui broker, misalnya ketika mempertahankan semuanya ke dalam database. Ini tidak boleh dilakukan dengan menggunakan klien MQTT dan berlangganan wildcard multi level. Alasannya adalah bahwa seringkali klien yang berlangganan tidak dapat memproses pemuatan pesan yang datang padanya. Apalagi jika Anda memiliki throughput yang besar. Solusi yang kami sarankan adalah menerapkan ekstensi di broker MQTT, misalnya sistem plugin HiveMQ memungkinkan Anda untuk terhubung ke perilaku HiveMQ dan menambahkan rutin asinkron untuk memproses setiap pesan yang masuk dan meneruskannya ke database.
Apakah disana juga?
- sistem serupa (ekstensi / plugin) untuk broker mosquitto,
- metode lain yang disarankan yang berfungsi dengan mosquitto, atau
- bukti yang masuk akal bahwa pendekatan ini sama sekali tidak perlu, yaitu bahwa klien yang berlangganan
#
dapat melakukannya dengan baik?
/programming//q/31584613/3984613 tidak membahas pertanyaan ini secara mendalam.
Diskusi pada milis openHAB ini tampaknya menyarankan tidak ada masalah dengan menggunakan
#
sebagai berlangganan untuk menerima semua pesan:Pertanyaan Stack Overflow ini juga menyarankan metode yang sama:
Seperti yang ditunjukkan oleh Bence Kaulics , spesifikasi memang menyatakan yang
#
valid:Jujur, saya membantah apakah klaim asli benar-benar masuk akal:
Jika itu masalahnya, bagaimana cara broker menangani pesan? Selama klien Anda memiliki karakteristik kinerja yang mirip dengan broker, saya sangat meragukan kemungkinan untuk membanjiri klien, karena tingkat lalu lintas itu juga akan membanjiri broker dan menyebabkannya macet terlebih dahulu.
Singkatnya, klaim HiveMQ tampaknya tidak didukung oleh banyak bukti dari sumber lain dan, ketika Anda mempertimbangkan apa artinya sebenarnya, itu tampaknya tidak terlalu logis.
sumber
Saya pikir penting untuk mempertimbangkan bahwa ada banyak kasus penggunaan yang berbeda untuk broker MQTT, seperti halnya perangkat lunak apa pun.
Menangani pesan obrolan untuk satu miliar pengguna (banyak pengguna, tingkat pesan yang relatif rendah per pengguna) berbeda dengan sistem dengan sedikit klien tetapi tingkat pesan tinggi, dan keduanya berbeda dengan sistem otomasi rumah (beberapa klien, laju pesan rendah) .
HiveMQ sedang memikirkan aplikasi tingkat pesan / klien yang sangat tinggi - dalam hal ini kemampuan broker hampir pasti jauh melebihi klien.
Jika Anda ingin berlangganan
#
di sistem otomasi rumah Anda maka itu benar-benar tidak menyebabkan masalah. Anda dapat memeriksa dan melihat apakah broker menggunakan CPU berlebih dalam hal apa pun.Seperti pada jawaban lain, berlangganan
#
akan memberi Anda semua topik 'normal', yaitu apa pun yang tidak dimulai dengan a$
. Saya menafsirkan spek tersebut dengan mengatakan bahwa setiap topik yang dimulai dengan$
keseluruhan pohon itu sendiri terpisah, jadi Anda harus berlangganan$SYS/#
,$whatever/#
untuk mendapatkan semuanya . Anda kemungkinan besar tidak mau melakukan itu untuk aplikasi normal.sumber