Tôi có thể xuất bản nhiều chủ đề MQTT trong một yêu cầu không?


10

Tôi đã có một thiết bị có nhiều cảm biến xuất bản từng cảm biến đọc riêng cho các chủ đề như

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

Chúng tôi cung cấp nó cho AWS IoT bằng SDK AWS IoT của Amazon, tức là

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

Mỗi cuộc gọi tạo ra một gói TCP riêng và một phản hồi riêng từ nhà môi giới AWS MQTT. Vấn đề là một số nút của chúng tôi nằm trên một mạng rất chậm và chờ ACK sau mỗi gói bị trì hoãn xuất bản.

Có cách nào để kết hợp tất cả các lần đọc cảm biến lại với nhau, vào một gói TCP duy nhất, trong khi xuất bản chúng thành các chủ đề riêng biệt và giữ QOS = 1 không?

Câu trả lời:


7

Có vẻ như sdk của aws đang sử dụng một xuất bản đồng bộ (vì nó sử dụng mã trả về) vì vậy nó chặn cho mỗi tin nhắn.

Không có lý do nào ở cấp độ giao thức MQTT mà bạn không thể có nhiều tin nhắn trong chuyến bay cùng một lúc để bạn có thể xem xét bằng cách sử dụng ứng dụng khách không đồng bộ paho để chờ phản hồi QOS1 có thể được thực hiện mà không chặn xuất bản tin nhắn tiếp theo.

Một tùy chọn khác là chỉ xuất bản một tin nhắn tổng hợp với tất cả các giá trị cảm biến trong một lần và tách nó ra ở đầu người tiêu dùng.


1
Chỉ cần anh không lo lắng về mã phản hồi. Nếu bạn nhận được 200 OKphản hồi không , điều đó có nghĩa là cả hai thao tác đều thất bại? Chỉ một? Nếu vậy thì cái nào?
Mawg nói rằng phục hồi Monica

Bạn vẫn có thể kiểm tra mã trả về, bạn chỉ cần kiểm tra mã đó với mã thông báo được trả về từ lần xuất bản để biết nó liên quan đến mã nào.
hardillb

Nhưng, không giống như SUBSCRIBE, chúng ta không thể thiết lập một loạt các chủ đề và tin nhắn tương ứng của chúng trong cùng một tin nhắn MQTT, phải không?
cogitoergosum
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.