क्या मैं एक अनुरोध में कई MQTT विषय प्रकाशित कर सकता हूं?


10

मुझे कई सेंसरों के साथ एक उपकरण मिला है जो प्रत्येक सेंसर रीडिंग को अलग-अलग विषयों जैसे प्रकाशित करता है

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

हम इसे अमेज़न एडब्ल्यूएस आईओटी एसडीके का उपयोग करके एडब्ल्यूएस आईओटी को खिलाते हैं, अर्थात

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 की प्रतीक्षा कर रहे हैं।

क्या किसी भी टीसीपी पैकेट को एक साथ सभी सेंसर रीडिंग को बंडल करने का कोई तरीका है, जबकि उन्हें अलग-अलग विषयों में प्रकाशित करना और क्यूओएस = 1 रखना है?

जवाबों:


7

ऐसा लगता है कि IoT sdk aws तुल्यकालिक प्रकाशित का उपयोग कर रहा है (क्योंकि यह रिटर्न कोड का उपयोग कर रहा है) इसलिए यह प्रत्येक संदेश के लिए अवरुद्ध है।

एमक्यूटीटी प्रोटोकॉल स्तर पर ऐसा कोई कारण नहीं है कि आप एक बार में उड़ान में एक से अधिक संदेश नहीं दे सकते हैं, इसलिए आप पीओ एसिंक्रोनस क्लाइंट का उपयोग कर सकते हैं ताकि क्यूओएस 1 प्रतिक्रिया पर प्रतीक्षा अगले संदेश के प्रकाशन को अवरुद्ध किए बिना किया जा सके।

एक अन्य विकल्प यह होगा कि सभी सेंसर मूल्यों के साथ सिर्फ एक समग्र संदेश प्रकाशित किया जाए और इसे उपभोक्ता अंत में विभाजित किया जाए।


1
बस जब तक वह प्रतिक्रिया कोड के बारे में चिंतित नहीं है। यदि आपको कोई 200 OKप्रतिक्रिया नहीं मिलती है , तो क्या इसका मतलब है कि दोनों ऑपरेशन विफल रहे? केवल एक? यदि हां, तो कौन सा?
मावग का कहना है कि मोनिका जूल

आप अभी भी रिटर्न कोड की जांच कर सकते हैं, आपको बस यह पता करने के लिए प्रकाशन से लौटाए गए टोकन के खिलाफ जांच करने की आवश्यकता है कि वह किस से संबंधित है।
हार्डिल्ब

लेकिन, SUBSCRIBE के विपरीत, हम एक ही MQTT संदेश में विषयों और उनके संबंधित संदेशों की एक सरणी सेट नहीं कर सकते, है ना?
कोगिटेरोगोसम

hardillb ने आपको बताया " एक अन्य विकल्प यह होगा कि एक ही संदेश में सभी सेंसर मूल्यों के साथ एक समग्र संदेश प्रकाशित करें और इसे उपभोक्ता के अंत में विभाजित करें।" इसका मतलब क्या आप बहु-स्तरीय वाइल्डकार्ड हैं ?
user170106

1
@ user170106 नहीं, सभी अद्यतनों को एक संदेश में बाँधने का मतलब होगा कि आपको केवल किसी एक विषय की सदस्यता लेने की आवश्यकता है।
हार्डबिल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.