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.[1]

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

Publicēt — parakstīties princips

[labot šo sadaļu | labot pirmkodu]

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

[labot šo sadaļu | labot pirmkodu]

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

[labot šo sadaļu | labot pirmkodu]

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:

Biti 7 6 5 4 3 2 1 0
1. baits MQTT vadības paketes tips Katram tipam specifiskie karodziņi
2. baits Atlikušais garums
3. baits Neobligāts. Mainīga garuma galvene
...
n baits
n+1 baits Neobligāts. Mainīga garuma ziņojuma vērtums
...
m baits

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:

Nosaukums Vērtība Virziens Paskaidrojums
Rezervēts 0 Nav atļauts Rezervēts
CONNECT 1 Klients uz serveri Klients prasa savienojumu ar serveri
CONNACK 2 Serveris uz klientu Savienojuma apstiprinājums
PUBLISH 3 Klients uz serveri vai serveris uz klientu Publicē ziņojumu
PUBACK 4 Klients uz serveri vai serveris uz klientu Publikācijas apstiprinājums
PUBREC 5 Klients uz serveri vai serveris uz klientu Publikācija pieņemta (garantētās nosūtīšanas 1. daļa)
PUBREL 6 Klients uz serveri vai serveris uz klientu Publikācija tiek atcelta (garantētās nosūtīšanas 2. daļa)
PUBCOMP 7 Klients uz serveri vai serveris uz klientu Publicēšana pabeigta(garantētās nosūtīšanas 3. daļa)
SUBSCRIBE 8 Klients uz serveri Parakstīšanās pieprasījums
SUBACK 9 Serveris uz klientu Parakstīšanās apstiprinājums
UNSUBSCRIBE 10 Klients uz serveri Parakstīšanās anulēšanas pieprasījums
UNSUBACK 11 Serveris uz klientu Parakstīšanās anulēšanas apstiprinājums
PINGREQ 12 Klients uz serveri PING pieprasījums
PINGRESP 13 Serveris uz klientu PING atbilde
DISCONNECT 14 Klients uz serveri Klients atvienojas
Rezervēts 15 Nav atļauts Rezervēts

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

[labot šo sadaļu | labot pirmkodu]
  • 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

Ārējās saites

[labot šo sadaļu | labot pirmkodu]