Bisakah saya menerbitkan banyak topik MQTT dalam satu permintaan?

10

Saya punya perangkat dengan banyak sensor yang menerbitkan setiap sensor membaca secara terpisah untuk topik-topik seperti

device1-id/sensor1-id = 10.2
device1-id/sensor2-id = 15.5
[...]

Kami memberinya makan dengan AWS IoT menggunakan Amazon AWS IoT SDK, yaitu

mqtt_params.qos = QOS1;
mqtt_params.payload = payload;
mqtt_params.payloadLen = payload_len;
rc = aws_iot_mqtt_publish(&client, topic, topic_len, &mqtt_params);

Setiap panggilan menghasilkan paket TCP terpisah dan respons terpisah dari broker AWS MQTT. Masalahnya adalah bahwa beberapa node kami berada di jaringan yang sangat lambat dan menunggu ACK setelah setiap paket menunda penerbitan.

Apakah ada cara untuk menggabungkan semua pembacaan sensor menjadi satu paket TCP, sekaligus mempublikasikannya ke dalam topik yang terpisah dan menjaga QOS = 1?

MLu
sumber

Jawaban:

7

Sepertinya aws IoT SDK menggunakan publikasi yang sinkron (karena menggunakan kode pengembalian) sehingga memblokir untuk setiap pesan.

Tidak ada alasan di tingkat protokol MQTT bahwa Anda tidak dapat memiliki banyak pesan dalam penerbangan sekaligus sehingga Anda dapat melihat menggunakan klien asinkron paho sehingga menunggu pada respons QOS1 dapat dilakukan tanpa memblokir penerbitan pesan berikutnya.

Pilihan lain adalah mempublikasikan hanya satu pesan komposit dengan semua nilai sensor dalam sekali jalan dan membaginya di sisi konsumen.

hardillb
sumber
1
Selama dia tidak khawatir tentang kode respons. Jika Anda mendapat 200 OKtanggapan, apakah itu berarti kedua operasi gagal? Hanya satu? Jika demikian, yang mana?
Mawg mengatakan mengembalikan Monica
Anda masih dapat memeriksa kode kembali, Anda hanya perlu memeriksanya terhadap token yang dikembalikan dari terbitan untuk mengetahui mana yang berhubungan dengannya.
hardillb
Tetapi, tidak seperti SUBSCRIBE, kami tidak dapat mengatur berbagai topik dan pesannya dalam pesan MQTT yang sama, bukan?
cogitoergosum