MQTT

MQTT (MQ Telemetry Transport jeb Message Queuing Telemetry Transport) ir publicēt — parakstīties ziņojumapmaiņas protokols. Tas ir lietojumslāņa protokols, kas darbojas virs TCP/IP.
MQTT ir kļuvis populārs mašīna mašīnai (M2M) un lietu interneta risinājumos.

MQTT protokols ir maksimāli vienkāršots, ar minimālu paketes izmēru. Tai pat laikā katram ziņojumam var norādīt, cik garantēti tas jānogādā. Tādējādi ar to var pārsūtīt datus no ierīcēm ar ierobežotu atmiņas apjomu vai zemu datu pārraides ātrumu vai nestabilu sakaru kanālu, kā arī ļauj izveidot ierīces ar zemu elektroenerģijas patēriņu.

Protokolu 1999. gadā izstrādāja IBM inženieris Endijs Stenfords-Klārks un Arcom (tagad Eurotech) inženieris Arlens Nipers.

Standarts ir atvērts. 2014. gadā standartu organizācija OASIS MQTT Version 3.1.1. publicēja kā standartu. Starptautiskā standartizācijas organizācija (ISO) un Starptautiskā elektrotehniskā komisija (IEC) šo standartu publicēja kā ISO/IEC 20922:2016.

Sensoru bezvadu tīkliem, kas neizmanto TCP/IP (piemēram, ZigBee), izstrādāts protokols MQTT-SN.

Publicēt — parakstīties princips 
MQTT publicēt — parakstīties sistēma sastāv no servera (agrākās versijā to sauca par "starpnieku" jeb "brokeri") un klientiem. Klienti var būt divu veidu: izdevēji (publisher) un parakstītāji jeb abonenti (subscriber). Klienti savā starpā parasti ir atdalīti, un atdalīšana var tikt organizēta trīs veidos:
 telpā — izdevējam un parakstītājam nav jāzina vienam par otru;
 laikā — izdevējam un parakstītājam nav jādarbojas vienā un tajā pašā brīdī;
 sinhronizācija — darbībai abos galos nav jāapstājas ziņojuma publicēšanas vai saņemšanas laikā.

Izdevējs un parakstītājs ziņojumus nesūta viens otram tiešā veidā. Ziņojumu saņemšanu no izdevējiem un izsūtīšanu parakstītājiem koordinē serveris. Tas nodrošina visu ziņojumu saņemšanu, filtrēšanu, nosaka klientus, kam jāsaņem ziņojumi, un pārsūta ziņojumus parakstītājiem.

MQTT ziņojumu izsūtīšanas vienkāršots darbības princips:
 izdevējs nosūta ziņojumu ar datiem (piemēram, temperatūras sensora mērījumu) serverim, norādot tematu (topic), uz kuru šis ziņojums attiecas (piemēram "Temp");
 serveris nosaka, kuri klienti ir parakstījušies uz attiecīgo tematu (šajā gadījumā "Temp");
 serveris parakstītājiem nosūtīta ziņojumu, kas bija saņemts attiecīgajā tematā ("Temp").

Katrs parakstītājs var parakstīties uz vairākiem tematiem , tādējādi saņemot datus no vairākiem izdevējiem. Tam nav jānodibina sakari ar katru izdevēju, vienīgi jāpaziņo serverim, kuri temati tam "interesē".

Ja serveri nokonfigurē par MQTT tiltu, tas var pārsūtīt ziņojumus (visus vai par noteiktiem tematiem) citam serverim. Tādējādi var panākt sistēmu apvienošanu vai mērogošanu.

Pakalpojumu kvalitātes mehānisms 
MQTT nodrošina pakalpojumu kvalitātes trīs veidus:
 QoS 0: At most once — "ne vairāk par vienu". Izdevējs publicē ziņojumu (PUBLISH) uz servera, bet serveris to publicē parakstītājam. Izdevējs neprasa, lai ziņojums tiktu garantēti nogādāts parakstītājam. Tātad parakstītājs var saņemt ziņojumu, bet var arī nesaņemt. Šo veidu izmanto, piemēram, temperatūras mērījumu veikšanai, kur temperatūra nemainās ātri; tad viena mērījuma neesamība nav būtiska kopējos datos.
 QoS 1: At least once — "vismaz viens". Izdevējs publicē ziņojumu (PUBLISH) uz servera, serveris saglabā šo ziņojumu un publicē parakstītājam. Tikai pēc tam, kad ziņojums tika publicēts parakstītājam, serveris izdevējam nosūta publicēšanas apstiprinājumu (PUBACK). Ja izdevējs nav saņēmis publicēšanas apstiprinājumu, tas sūta ziņojumu atkārtoti. Tādā veidā parakstītājs saņems ziņojumu vismaz vienu reizi.
 QoS 2: Exactly one — "tieši viens". Parakstītājam garantēti tiek nosūtīts tieši viens ziņojums. To panāk ar ziņojumu apstiprināšanas un pabeigšanas (PUBREC, PUBREL, PUBCOMP) pakešu sūtīšanu. Šo veidu izmanto, kad ziņojumus nedrīkst pazaudēt vai dublēt, piemēram, komandas nosūtīšana izpildmehānismam.

Vadības paketes formāts 
MQTT protokols darbojas, noteiktā veidā apmainoties ar vadības paketēm.

Biti paketes baitos tiek numurēti no 7 līdz 0, kur bits 7 ir visnozīmīgākais bits.
Teksta lauki tiek kodēti UTF-8.

MQTT vadības paketes (Control Packet) formāts:

Pirmie divi baiti ir fiksēta galvene. Tā ir visās MQTT vadības paketēs. Pirmajos četros bitos [7 — 4] tiek norādīts vadības paketes tips.

Vadības paketes tipi:

Galvenes 1. baita nākamie [3 — 0] biti ir karodziņi, kas ir specifiski katram tipam. Piemēram PUBLISH tipam 3. bits ir DUP (publikācijas paketes dubulta nogāde); 2. un 1. bits ir QoS (pakalpojumu kvalitāte); 0. bits ir RETAIN (jāsaglabā ziņojums)

Fiksētās galvenes 2. baitā ir "Atlikušais garums". Tas ir baitu skaits, kas paliek esošajā paketē, ieskaitot datus mainīgā galvenē un derīgajā slodzē. Atlikušais garums neietver bitus, ko izmanto atlikušā garuma kodēšanai.

Vairāku tipu vadības paketēm bez fiksētās galvenes ir arī mainīgā galvenes daļa.

Daļai vadības pakešu ir ziņojuma vērtums.

Servera programmatūra 
 Apache ActiveMQ
 Apache ActiveMQ Apollo
 Apache ActiveMQ Artemis
 Bevywise MQTTRoute
 Emitter
 emqttd jeb EMQ (Erlang MQTT Broker)
 HBMQTT
 HiveMQ
 IBM Integration Bus
 IBM MessageSight
 IBM MQ
 JoramMQ
 Moquette
 Mosca
 Mosquitto
 MQTTnet
 RabbitMQ ar MQTT spraudni
 Solace
 VerneMQ
 Vert.x MQTT Broker

Atsauces

Ārējās saites 
 MQTT oficiāla vietne
 MQTT Version 3.1.1 OASIS Standard, 29 October 2014
 MQ Telemetry Transport (MQTT) V3.1 Protocol Specification IBM
 MQTT man page mosquitto

Lietojuma slāņa protokoli
Ziņojumapmaiņas starpprogrammatūra
ISO standarti
IEC standarti