MQTT Là Gì
MQTT (Message Queue Telemetry Transport) là một giao thức truyền thông điệp (message) theo mô hình publish/subscribe (xuất bản – theo dõi), 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.
MQTT gồm 2 phần chính là Broker và Clients.
Trong đó, 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 mesage từ publisher, xếp các message theo hàng đợi rồi chuyển chúng tới một địa chỉ 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,...
Client thì được chia thành 2 nhóm là publisher và subscriber. Client là các software components hoạt động tại thiết bị đầu cuối nên chúng được thiết kế để có thể hoạt động một cách linh hoạt và gọn nhẹ (lightweight). Client chỉ làm ít nhất một trong 2 việc là publish các message lên một topic cụ thể hoặc subscribe một topic nào đó để nhận message từ topic này.
MQTT Clients tương thích với hầu hết các nền tảng hệ điều hành hiện có: MAC OS, Windows, LInux, Androids, iOS...
Các bạn có thể tưởng tượng broker giống như một sạp báo. Publisher là các tòa soạn báo. Tòa soạn in báo và chuyển cho sạp báo. Người đọc báo đến sạp báo, chọn tờ báo mình cần đọc (subscriber).
Các khái niệm đáng chú ý trong giao thức MQTT
Trong một hệ thống sử dụng giao thức MQTT, nhiều client kết nối tới một server (thường được gọi là MQTT Broker). Mỗi client sẽ đăng ký theo dõi các kênh thông tin (topic) hoặc gửi dữ liệu lên kênh thông tin đó. Quá trình đăng ký này gọi là “subscribe” và hành động một client gửi dữ liệu lên kênh thông tin được gọi là “publish”. Mỗi khi kênh thông tin đó được cập nhật dữ liệu (dữ liệu này có thể đến từ các client khác) thì những client nào đã đăng ký theo dõi kênh này sẽ nhận được dữ liệu cập nhật đó.
Message
Trong giao thức MQTT, message còn được gọi là "message payload", có định dạng mặc định là plain-text (chữ viết người đọc được), tuy nhiên người sử dụng có thể cấu hình thành các định dạng khác.
Topic
Topic có thể coi như một "đường truyền" logic giữa 2 điểm là publisher và subscriber. Về cơ bản, khi message được publish vào một topic thì tất cả những subscriber của topic đó sẽ nhận được message này.
Giao thức MQTT cho phép khai báo các topic kiểu phân cấp.
Giả sử chúng ta có một hệ thống cảm biến đo thông tin môi trường trong ngôi nhà của chúng ta. Một ngôi nhà thường sẽ có nhiều phòng và mỗi phòng lại có bộ cảm biến môi trường riêng. Như vậy, các topic phục vụ truyền tải thông tin môi trường cho ngôi nhà của chúng ta có thể được khai báo như sau:
home/living-room/temperature
:
topic thông tin nhiệt độ phòng khách
home/living-room/humidity
:
topic thông tin độ ẩm phòng khách
home/kitchen/temperature
:
topic thông tin nhiệt độ bếp ăn
Bên cạnh đó, MQTT cũng hộ trợ wildcards trong cú pháp khai báo topic, cụ thể đó là"+" và "#". Trong đó,"+"bao gồm các topic ở cùng 1 level và"#"bao gồm tất cả các topic nằm dưới topic hiện tại.
Cụ thể như sau, khi muốn biết thông tin nhiệt độ của từng phòng, ta chỉ cần khai báo topic cần theo dõi là:
home/+/temperature
Khi muốn biết tất cả thông tin trong 1 phòng, ta sẽ khai báo topic cần theo dõi là:
home/kitchen/#
QoS - Quality of Service
Khái niệm này ra đời do nhu cầu đảm bảo sự chắc chắn trong việc gửi - nhận message giữa client và broker
MQTT hỗ trợ 3 mức QoS
QoS-0: là mức đảm bảo thấp nhất, tất cả các message có QoS 0 sau khi được gửi đi bởi publisher sẽ không được kiểm tra xem đã đến broker hay chưa (fire - and - forget)
QoS-1: message được đảm bảo rằng đã đến nơi nhận ít nhất 1 lần (tức là sự trùng lặp vẫn có thể xảy ra)
QoS-2: đây là mức đảm bảo cao nhất, broker sẽ đảm bảo các message có QoS-2 sẽ đến nơi nhận chỉ 1 lần duy nhất, không trùng lặp, không thất lạc. Tất nhiên việc xác nhận với QoS-2 sẽ tốn băng thông hơn 2 cách còn lại.
Retain
Retain là một cờ (flag) được gắn cho một message của giao thức MQTT. Retain chỉ nhận giá trị 0 hoặc 1 (tương ứng 2 giá trị logic false hoặc true). Nếu retain = 1, broker sẽ lưu lại message cuối cùng của 1 topic kèm theo mức QoS tương ứng. Khi client bắt đầu subscribe topic có message được lưu lại đó, client ngay lập tức nhận được message.
(tham khảo từ techmaster.vn)