Zobacz także:
Protokół komunikacyjny MQTT jest oparty o wzorzec publikacji i subskrypcji. Jego podstawową zaletą jest lekkość, dzięki czemu można go implementować w bardzo małych systemach mikroprocesorowych, oraz przy niskich prędkościach transmisji danych. MQTT zostało stworzone przez Andy’ego Stanforda-Clarka oraz Arlena Nippera w 1999 roku. Protokół MQTT znajduje szczególne zastosowanie w branży IoT.
Struktura działania opiera się na jednym centralnym serwerze nazywanym brokerem, oraz wielu klientach. Każdy z klientów może publikować i/lub subskrybować dane w ramach poszczególnych tematów. Ogromną zaletą jest to, że klienci nie muszą wiedzieć o sobie nawzajem, dzięki czemu ich oprogramowanie może być bardzo proste i wymaga mało zasobów. Wszystkim obciążony jest broker, który odbiera publikowane dane i rozsyła je do wszystkich subskrybentów danego tematu. Do najpopularniejszych brokerów można na daną chwilę zaliczyć: Mosquitto, RabbitMQ, HiveMQ, IBM MessageSight, VerneMQ.
Tematy
Ciekawym rozwiązaniem są tematy które pełnią funkcję kanału do przesyłania określonych informacji. Charakteryzują się tym, że nie mają określonych nazw. A co jeszcze ciekawsze to to, że nie trzeba ich w żaden sposób zakładać. Wystarczy zacząć publikować lub subskrybować jakiś temat.
Pomimo, że nazwa tematu może być dowolna to dobrą praktyką jest stosowanie pewnej hierarchicznej konstrukcji. Dla przykładu przyjmijmy taki szablon nazw tematów:
myHome/[device]/[parametr]
więc nazwy tematów brzmiały by:
myHome/sensor1/temperature myHome/sensor1/humidity myHome/sensor1/presure myHome/sensor2/temperature myHome/sensor2/humidity myHome/sensor3/temperature
Poza wizualnymi zaletami takiego rozwiązania zyskujemy także możliwość subskrypcji kilku tematów jednocześnie. W tym celu stosujemy dwa znaki: “+” oraz “#”.
Znak “#” powoduje wywołanie wszystkich tematów zawierających podaną przed znakiem frazę. Na przykład:
myHome/sensor1/#
spowoduje, że będziemy subskrybować następujące tematy:
myHome/sensor1/temperature myHome/sensor1/temperature/Celsius myHome/sensor1/temperature/fahrenheit myHome/sensor1/humidity myHome/sensor1/presure
Działanie znaku “+” jest podobne, ale zastępuje on jeden poziom w hierarchii wszytkimi możliwymi frazami na tym poziomie, dla przykładu:
myHome/+/temperature
umożliwi subskrybowanie tematów:
myHome/sensor1/temperature myHome/sensor2/temperature myHome/sensor3/temperature
QoS – Quality of Service
Protokół MQTT umożliwia określenie w jaki sposób ma zostać wysłana nasza wiadomość. Służą do tego trzy poziomy QoS:
- wiadomość wysyłana jest bez jakiegokolwiek oczekiwania na potwierdzenie.
- wiadomość zostanie wysłana do co najmniej jednego odbiorcy (subskrybenta), wymagane jest potwierdzenie odbioru.
- wiadomość zostanie wysłana do tylko jednego odbiorcy.