Besser als Fussball: MQTT Java Client mit Paho

Fussball? Wie kann man per Java einen MQTT Client mit Paho schreiben, der z.B. die Anzahl Flugzeuge in Hannover anzeigt? Und das innerhalb der ersten Halbzeit, da nur 2 Klassen benötigt werden.

Mein Raspberry Pi sendet an den öffentlichen Testserver test.mosquitto.org unter den Topic /Anzahl/Flugzeuge/Hannover alle 5 Minuten die aktuelle Anzahl, so das dieses Beispiel jeder nachvollziehen kann.

Hier die Architektur:

mqtt

Wir brauchen zuerst ein Eclipse Maven Projekt mit Java 1.8 mit dieser pom.xml und einen Eintrag des Paho Repo, da es in Maven Central nicht vorhanden ist:

Dann eine FlugClient.java Klasse:

Dann noch eine MQTT Callback Klasse mit Namen LogCallback.java. Hier ein einfaches Beispiel das nur per Log4j auf der Konsole loggt:

Es kann aber auch leicht erweitert werden, einfach das Interface MqttCallback in einer Callback Klasse implementieren. Die ankommenden Meldungen werden in der messageArrived Methode behandelt.

Wenn wir nun die FlugClient Klasse starten, wird auf der Konsole alle 5 Minuten die Anzahl Flugzeuge in Hannover in einem eigenen Thread ausgegeben:

Da ich beim Senden der Anzahl die retained messages (aufbewahrte Nachrichten) auf true gesetzt habe, kommt gleich beim Start des Client die letzte Meldung.
D.h. das sind Nachrichten mit gesetztem Retain-Flag. Meldet sich ein neuer Teilnehmer am Topic an, erhält er als Erstes die letzte Nachricht, die mit diesem Flag im Topic eingetroffen ist. Das gilt auch bei Abonnements mit Wildcards, die das betreffende Topic enthalten.

Die Flugdaten werden übrigens von einem eigenen Raspberry Pi mit node-RED von IBM an den Testserver, Twitter, Debug-Konsole und ThinkSpeak gesendet, hier der Flow:

node-red-flow

Wer das mal ausprobiert hat, kann gerne einen Like oder Kommentar hinterlassen.

Oder doch besser Fußball?