1つのリクエストで複数のMQTTトピックを公開できますか?


10

各センサーの読み取り値を次のようなトピックに個別に公開する複数のセンサーを備えたデバイスを持っています

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

Amazon AWS IoT SDKを使用してAWS IoTにフィードします。

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つのTCPパケットにまとめて、それらを別々のトピックに公開し、QOS = 1を維持する方法はありますか?

回答:


7

aws IoT SDKが同期パブリッシュを使用している(リターンコードを使用しているため)ように見えるため、メッセージごとにブロックされます。

MQTTプロトコルレベルでは、一度に複数のメッセージを送信できないため、paho非同期クライアントを使用して、次のメッセージの発行をブロックせずにQOS1応答を待機できるようにする理由はありません。

別のオプションは、一度にすべてのセンサー値を含む1つの複合メッセージを公開し、それをコンシューマー側で分割することです。


1
応答コードを気にしない限り。200 OK応答がない場合、それは両方の操作が失敗したことを意味しますか?唯一?もしそうなら、どれですか?
Mawgはモニカを2017

リターンコードを確認することもできます。パブリッシュから返されたトークンと照合して、関連するコードを確認するだけです。
hardillb 2017

しかし、SUBSCRIBEとは異なり、トピックとそれに対応するメッセージの配列を同じMQTTメッセージにセットアップすることはできません。
cogitoergosum
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.