MQTT jsem zacal pouzivat asi pred pul rokem ve spolupraci s ProtocolBuffers, hlavnim ucelem je rizeni laboratornich experimentu a vubec pristroju. Jsem si vedom, ze jak MQTT, tak ProtoBuf maji nektera omezeni -- MQTT napriklad neumi nic jineho, nez model pub-sub. ProtoBuf zase casto provadi spoustu bitovych presunu (jsou-li pouzity inty promenne delky). Nicmene jsem zatim dost spokojen, delal jsem i zatezove testy, ze jsem pres to posilal v realnem case syrove obrazky z kamer. Nebylo to vyznamne pomalejsi, nez kdyz jsem je posilal pres stdin/stdout trubky.
Vyhovuje mi pomerne siroka podpora jazyku. S MQTT+protobufem zatim ja a par kolegu pouzivame C, C++ (na jedinej ucel, dynamicke parsovani .proto souboru za behu bez rekompilace), Julii, Python. Do Julie jsem si dopsal jednovlaknovou blokujici podporu MQTT, podpora ProtoBuf.jl uz tam byla a fungovala slusne (predevcirem jsem odhalil jednu chybu, ale byla hned opravena).
Pro zajemce o MQTT doporucim aktualni broker mosquitto 1.4.5, mel jsem predtim 1.3.4 a ten se za nekterejch okolnosti divne sekal (zpozdeni okolo 1..2s).
Par tipu:
- pro logovani provozu pouzivam SQLite, jednoduchej subscriber uklada timestamp a binarni MQTT payload; lze pak dokonce indexovat i podle jednotlivejch ProtoBuf poli, staci doplnit o .so modul parsujici ProtoBuf; logovani ale funguje i pro ne-ProtoBuf provoz v ramci MQTT;
- vic mosquitto serveru lze pohodlne sbridgovat, zatim jsem ale neprisel na to, jak to udelat, aby zprava, kterou si klient odhlasi, prestala pres bridge chodit.
> zatim jsem ale neprisel na to, jak to udelat, aby zprava, kterou si klient odhlasi, prestala pres bridge chodit.
To nejde, aspoň ne standardním MQTT. Ve standardním MQTT se totiž bridgující broker chová jako standardní klient - tj. pokud má svým klientům umožnit subskripci třeba na A/B, musí si sám A/B subskribovat - tj. chodí na něj všechny zprávy z tohodle topicu i kdyby na něj žádný jeho klient subskribovaný nebyl.
HiveMQ má svůj speciální (čti: nestandardní) bridgeovací protokol, tam to možná jde, nevím, detaily neznám.