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
Atsauces
[labot šo sadaļu | labot pirmkodu]Ārējās saites
[labot šo sadaļu | labot pirmkodu]- 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