MQTT là gì?

MQTT (Message Queuing Telemetry Transport) là một giao thức gởi dữ liệu dạng publish/subscribe, sử dụng cho các thiết bị IoT với băng thông thấp, độ tin cậy cao và khả năng được sử dụng trong mạng lưới không ổn định.

Publish / Subscribe

Trong một hệ thống sử dụng giao thức MQTT, nhiều node trạm ( mqtt client ) kết nối tới một MQTT server ( Broker ). Mỗi client sẽ đăng ký một vài kênh (topic), ví dụ như “/client1/channel1”, “/client1/channel2”. Quá trình đăng ký này gọi là “subscribe”, giống như chúng ta đăng ký nhận tin trên một kênh Youtube. Mỗi client sẽ nhận được dữ liệu khi bất kỳ trạm nào khác gởi dữ liệu về kênh đã đăng ký. Khi một client gởi dữ liệu tới kênh đó, gọi là “publish”.

QoS (Qualities of service)

Có 3 tuỳ chọn QoS khi “publish” và “subscribe”:

QoS = 0 : Broker/client sẽ gởi dữ liệu đúng 1 lần, quá trình gởi được xác nhận bởi chỉ giao thức TCP/IP, giống kiểu đem con bỏ chợ.
QoS = 1 : Broker/client sẽ gởi dữ liệu với ít nhất 1 lần xác nhận từ đầu kia, nghĩa là có thể có nhiều hơn 1 lần xác nhận đã nhận được dữ liệu.
QoS = 2 : Broker/client đảm bảm khi gởi dữ liệu thì phía nhận chỉ nhận được đúng 1 lần, quá trình này phải trải qua 4 bước bắt tay.

Một gói tin có thể được gởi ở bất kỳ QoS nào, và các client cũng có thể subscribe với bất kỳ yêu cầu QoS nào. Có nghĩa là client sẽ lựa chọn QoS tối đa mà nó có để nhận tin. Ví dụ, nếu 1 gói dữ liệu được publish với QoS = 2, và client subscribe với QoS = 0, thì gói dữ liệu được nhận về client này sẽ được broker gởi với QoS = 0, và 1 client khác đăng ký cùng kênh này với QoS = 2, thì nó sẽ được Broker gởi dữ liệu với QoS = 2.

Retain

Nếu RETAIN được set bằng 1, khi gói tin được publish từ Client, Broker PHẢI lưu trữ lại gói tin với QoS, và nó sẽ được gởi đến bất kỳ Client nào subscribe cùng kênh trong tương lai. Khi một Client kết nối tới Broker và subscribe, nó sẽ nhận được gói tin cuối cùng có RETAIN = 1 với bất kỳ topic nào mà nó đăng ký trùng.

( Tham khảo )