ฉันสามารถเผยแพร่ MQTT หลายหัวข้อในคำขอเดียวได้หรือไม่


10

ฉันมีอุปกรณ์ที่มีเซ็นเซอร์หลายตัวที่เผยแพร่เซ็นเซอร์แต่ละตัวแยกกันอ่านตามหัวข้อเช่น

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

เราป้อนให้ AWS IoT โดยใช้ Amazon AWS IoT SDK เช่น

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

การเรียกแต่ละครั้งสร้างแพคเก็ต TCP แยกต่างหากและการตอบสนองแยกต่างหากจากนายหน้า AWS MQTT ปัญหาคือว่าบางโหนดของเราอยู่ในเครือข่ายช้ามากและรอ ACK หลังจากทุกแพ็กเก็ตล่าช้าเผยแพร่

มีวิธีใดบ้างที่จะรวมการอ่านเซ็นเซอร์ทั้งหมดเข้าด้วยกันในแพ็คเก็ต TCP เดียวในขณะที่เผยแพร่พวกเขาในหัวข้อที่แยกต่างหากและรักษา QOS = 1

คำตอบ:


7

ดูเหมือนว่า aws IoT sdk กำลังใช้การเผยแพร่แบบซิงโครนัส (เนื่องจากใช้รหัสส่งคืน) ดังนั้นจึงมีการบล็อกสำหรับแต่ละข้อความ

ไม่มีเหตุผลที่ระดับโปรโตคอล MQTT ที่คุณไม่สามารถมีข้อความได้หลายข้อความพร้อมกันดังนั้นคุณสามารถดูได้โดยใช้ไคลเอนต์แบบอะซิงโครนัส paho เพื่อรอการตอบสนอง QOS1 สามารถทำได้โดยไม่ปิดกั้นการเผยแพร่ข้อความถัดไป

อีกทางเลือกหนึ่งคือการเผยแพร่ข้อความคอมโพสิตเพียงหนึ่งข้อความที่มีค่าเซ็นเซอร์ทั้งหมดในครั้งเดียวและแยกมันออกที่ส่วนท้ายของผู้บริโภค


1
ตราบใดที่เขาไม่กังวลเกี่ยวกับรหัสการตอบสนอง หากคุณไม่ได้รับการ200 OKตอบสนองนั่นหมายความว่าการดำเนินการทั้งสองล้มเหลวหรือไม่? หนึ่งเดียว ถ้าเป็นเช่นนั้น
Mawg กล่าวว่าคืนสถานะโมนิก้า

คุณยังสามารถตรวจสอบรหัสที่ส่งคืนคุณเพียงแค่ตรวจสอบกับโทเค็นที่ส่งคืนจากการเผยแพร่เพื่อทราบว่าเกี่ยวข้องกับรหัสใด
hardillb

แต่ไม่เหมือนกับ SUBSCRIBE เราไม่สามารถตั้งค่าหัวข้อและข้อความที่เกี่ยวข้องในข้อความ MQTT เดียวกันได้ใช่ไหม
cogitoergosum

คุณบอกว่า " อีกทางเลือกหนึ่งคือการเผยแพร่ข้อความคอมโพสิตเพียงหนึ่งข้อความที่มีค่าเซ็นเซอร์ทั้งหมดในครั้งเดียวและแยกมันออกที่ส่วนท้ายของผู้บริโภค" คุณหมายถึงสัญลักษณ์ตัวแทนหลายระดับหรือไม่
user170106

1
@ user170106 ไม่การรวมการอัปเดตทั้งหมดไว้ในข้อความเดียวหมายความว่าคุณจะต้องสมัครเป็นสมาชิกหัวข้อเดียวเท่านั้น
hardillb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.