Có cách nào để duy trì mức QoS MQTT cho đến khi đến được máy khách không?


9

MQTT cho phép người gửi đặt mức Chất lượng dịch vụ (QoS), cung cấp một số đảm bảo nhất định về việc có nhận được tin nhắn hay không (và liệu có cho phép trùng lặp hay không). Bài viết này từ HiveMQ nhấn mạnh vấn đề hạ cấp , trong đó một khách hàng có mức QoS thấp hơn sẽ không nhận được tin nhắn với sự đảm bảo mà người gửi yêu cầu:

Như đã nói, luồng QoS giữa máy khách xuất bản và đăng ký là hai thứ khác nhau cũng như QoS có thể khác nhau. Điều đó có nghĩa là mức QoS có thể khác với khách hàng A, người phát hành một thông báo và khách hàng B, người nhận được thông báo đã xuất bản. Giữa người gửi và người môi giới, QoS được xác định bởi người gửi. Khi người môi giới gửi tin nhắn đến tất cả các thuê bao, QoS của thuê bao từ khách hàng B được sử dụng.

MQTT có cung cấp một cách chỉ ra rằng việc hạ cấp này không được chấp nhận và thông điệp phải được gửi bằng cách sử dụng QoS yêu cầu của người gửi ban đầu không? Là tùy chọn duy nhất để đảm bảo rằng cả người gửi và người nhận đều có cài đặt QoS mong muốn trước khi truyền tin nhắn?

Câu trả lời:


8

Một điều cần nhớ khi làm việc với MQTT là "cả người đăng ký và nhà xuất bản đều được coi là khách hàng MQTT".

Như đã nói QoS được thiết lập trong khi xuất bản hoàn toàn liên quan đến nhà môi giới (B) chứ không phải các máy khách khác. Vì vậy, để đảm bảo rằng thuê bao (S) đang nhận mọi thứ mà nhà xuất bản (P) đang xuất bản, người ta cần sử dụng QoS 1.

Hãy xem xét các trường hợp: P - gửi với QoS 0, có nghĩa là mọi tin nhắn sẽ ở B tối đa một lần (một lần hoặc không). Trong trường hợp này nếu S đăng ký B với QoS 0 - không có gì đảm bảo rằng ngay cả khi người môi giới (B) nhận được tin nhắn cuối cùng sẽ đến S. QoS 1 - S chắc chắn sẽ nhận được QoS 2 - S sẽ không nhận được nhiều tin nhắn trong khi nhà môi giới có thể

Nếu chúng ta làm tương tự với QoS khác. Chúng ta sẽ biết QoS1 cho các thuê bao hoạt động tốt với tất cả các cấp vì QoS 1 là siêu bộ của tất cả.


MQTT không cung cấp bất kỳ dấu hiệu nào cho cùng nhưng chúng tôi có thể đạt được QoS của người gửi bằng cách sử dụng QoS 1 trong khi đăng ký.


4

QoS 1 hoặc 2 cấp chỉ đảm bảo rằng thông báo đã xuất bản đến nhà môi giới. Thuê bao QoS 1 hoặc 2 đảm bảo cho nhà môi giới rằng tin nhắn đã được nhận.

Xuất bản với 1 hoặc 2 không có nghĩa là bất cứ ai cũng nghe.

Trường hợp sử dụng của bạn là gì?


3
Đừng đặt câu hỏi trong câu trả lời. Nếu một cái gì đó không rõ ràng để lại nhận xét đầu tiên.
Bence Kaulics

Tôi tò mò về bất kỳ tình huống nào bạn có thể có cảm biến gửi dữ liệu đến nhà môi giới tin nhắn, sau đó được chuyển tiếp đến máy tính hoặc một số bộ xử lý khác trong đó điều quan trọng là các đảm bảo QoS được giữ.
Aurora0001
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.