MQTT (Message Queue Telemetry Transport) là một giao thức truyền tin (message) theo mô hình publish – subscribe (xuất bản – đăng ký nhận tin), sử dụng băng thông thấp, độ tin cậy cao và có khả năng hoạt động trong điều kiện đường truyền không ổn định. Do đó MQTT cực kỳ thích hợp cho các hệ thống IoT.
Sau đây ta cũng làm quen với các khái niệm cơ bản trong MQTT.
Mô hình MQTT gồm 2 phần chính là Broker và Client.
Mỗi Client sẽ đăng ký một vài kênh (topic), ví dụ như “house/living-room/temperature“, “house/kitchen/temperature“. 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 vậy. Mỗi Client sẽ nhận được dữ liệu khi bất kỳ Client nào khác gởi dữ liệu đến kênh đã đăng ký. Khi một Client gởi dữ liệu tới kênh đó, gọi là publish.
Broker được coi như trung tâm, nó là điểm giao của tất cả các kết nối đến từ Client. Nhiệm vụ chính của broker là nhận message từ các Client, xếp các message theo hàng đợi rồi chuyển chúng tới một địa chỉ (topic) cụ thể. Nhiệm vụ phụ của broker là nó có thể đảm nhận thêm một vài tính năng liên quan tới quá trình truyền thông như: bảo mật message, lưu trữ message, logs…
Có 3 tuỳ chọn QoS (Qualities of service) khi publish và subscribe:
Nếu RETAIN được set bằng 1, khi tin nhắn đượ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. Tuy nhiên, nếu Broker nhận được gói tin mà có QoS = 0 và RETAIN = 1, nó sẽ huỷ tất cả các gói tin có RETAIN = 1 trước đó. Và phải lưu gói tin này lại, nhưng hoàn toàn có thể huỷ bất kỳ lúc nào.
Khi publish một gói dữ liệu đến Client, Broker phải đặt RETAIN = 1 nếu gói được gởi như là kết quả của việc subscribe mới của Client (giống như tin nhắn ACK báo subscribe thành công). RETAIN phải bằng 0 nếu không quan tâm tới kết quả của việc subscribe.
Do MQTT thường được sử dụng trong điều kiện đường truyền không ổn định, nên cần phải đưa ra những kịch bản để xử lý trong các tình huống bị mất kết nối không đúng lúc. LWT (Last Will and Testament) được sử dụng trong trường hợp này.
Quá trình diễn ra như sau: