MQTT 5 für Java: HiveMQ MQTT Client

Seit geraumer Zeit findet MQTT 5 auf Broker-Seite statt, aber es mangelt an Clients. Das will der HiveMQ MQTT Client ändern.

Werkzeuge  –  0 Kommentare
MQTT 5 für Java: HiveMQ MQTT Client

(Bild: Shutterstock)

Die Spezifikation des IoT-Protokolls MQTT in Version 5 ist bereits seit über einem Jahr frei verfügbar, jedoch mangelte es bisher an Implementierungen auf Client- und Brokerseite. Die Macher des seit Kurzem als Open-Source-Variante erhältlichen MQTT Brokers HiveMQ, der MQTT 5 vollständig auf der Serverseite implementiert, haben sich daher mit der BMW Car-IT zusammengetan und einen vollwertigen, freien, MQTT-5-Client für Java-Entwickler veröffentlicht.

MQTT ist laut Google Trends das am meisten verwendete IoT-Protokoll, um Applikationen und Geräte über das Internet zu vernetzen. Unternehmen setzen MQTT für unterschiedliche Anwendungen wie Industrie 4.0, Connected Cars, Logistik, Mobile Apps und immer häufiger als schlanke Alternative für Messaging zwischen Microservices ein. Die Gründe für die Popularität sind unter anderem die guten Skalierungseigenschaften – mehrere Millionen Geräte und Hunderttausende Nachrichten pro Sekunde sind mit passenden Brokern möglich und auch üblich – und die einfache Integrierbarkeit in Enterprise-Applikationslandschaften. Neueinsteigern in das Thema MQTT finden eine Übersicht auf der MQTT-Essentials-Seite.

Eine wichtige Komponente in jedem Projekt ist eine in Projekten zu verwendende Bibliothek, mit der Applikationen über MQTT kommunizieren können und die sich nahtlos in bestehende Frameworks und Applikationen integriert. Der HiveMQ MQTT Client ist eine Open-Source-Java-Bibliothek, die BMW Car-IT und HiveMQ für den professionellen Projekteinsatz konzipiert haben.

Publish / Subscribe Architektur mit MQTT

Für den Einsatz von MQTT ist in erster Linie ein MQTT Broker erforderlich, der die entkoppelte und bidirektionale Kommunikation der Clients ermöglicht. Als Broker-Implementierung für größere Projekte eignet sich beispielsweise der für professionelle Cloud-Deployments entwickelte Enterprise MQTT Broker HiveMQ. Für Heimprojekte eignet sich beispielsweise Eclipse Mosquitto als schlanker Broker. MQTT-Clients können sowohl Geräte und Applikationen als auch Backendsysteme sein. Sie können in diversen Programmiersprachen über das Standardprotokoll miteinander kommunizieren.

Der aktuelle Standard MQTT 5

Anfang 2018 erschien der Standard MQTT 5 als Nachfolger des in nahezu allen MQTT-Projekten verwendeten Vorgängers MQTT 3.1.1. Das Spezifikationskomitee hat bei der Umsetzung die Wünsche der Community berücksichtigt. Zu den dadurch in den Standard eingeflossenen Neuerungen gehören unter anderem:

  • Shared Subscriptions: Clientseitiges Load Balancing für Topics mit hohen Nachrichtendurchsatz,
  • Negative Acknowledgements: Fehlercodes für gängige Fehler in der Protokollkommunikation,
  • User Properties: Custom Header für MQTT-Pakete, mit denen sich ähnlich wie in HTTP die MQTT-Pakete mit Metadaten anreichern lassen,
  • Flow Control: Backpressure-Handling auf Applikationsebene, das Clients erlaubt, die Menge an zu empfangenden Nachrichten zu begrenzen um so eine Überlast zu vermeiden,
  • Request/Reply: Unterstützung für Ende-zu-Ende-Empfangsbestätigung auf Applikationsebene für verteilte Systeme sowie
  • Session & Message Expiry: Sowohl Sessions als auch Nachrichten können nun auf Protokollebene eine maximale Gültigkeit definieren.

Für Applikationsentwickler bleibt MQTT trotz der Erweiterungen jedoch leicht zu handhaben, da viele Änderungen unter der Haube sitzen oder optional sind. Einige MQTT Broker wie HiveMQ unterstützen einen Teil der Neuerungen wie Expiry und Shared Subscriptions bereits für die alte MQTT-Version, allerdings als proprietäre Erweiterung.

Der HiveMQ MQTT Client

Motiviert von den weitreichenden Änderungen in der neuen MQTT-Version und mit Blick auf die Anforderungen an zeitgemäße IoT-Anwendungsfälle in Unternehmen haben die Entwickler des HiveMQ-Brokers und BMW Car-IT gemeinsam die Java-basierte Open-Source-Bibliothek HiveMQ MQTT Client entwickelt. Sie ist unter Apache 2 lizenziert und speziell auf MQTT 5 ausgerichtet, dabei aber rückwärtskompatibel zu MQTT 3.1.1 kompatibel. Die Projektziele des Clients sind:

  • Eine funktional zuverlässige Standardbibliothek für alle MQTT-Projekte mit Java umzusetzen,
  • vollständige MQTT-5-Unterstützung, die alle optionalen Features einschließt,
  • implizites und explizites Backpressure-Handling,
  • niedriger Speicherverbrauch,
  • hoher Nachrichtendurchsatz – sowohl sendend als auch empfangend,
  • leichte Integrierbarkeit in bestehende Java-Frameworks und -Applikationen und
  • unterschiedliche API-Schichten: Blocking, Async und RxJava.

Die Bibliothek ist flexibel und lässt sich sowohl auf Embedded-Geräten, die eine JVM besitzen, als auch in Backendsystemen verwenden. Da sie ein für Entwickler einfaches und flexibles Threading-Modell besitzt, lässt sie sich einfach in bestehende Applikationen integrieren. Der Fokus liegt auf sinnvollen Standardeinstellungen für den Großteil der Anwendungsfälle, um den benötigten Code für Entwickler standardmäßig sowohl klein als auch robust zu halten. Dennoch sind mit Anpassungen tiefe und unübliche Integrationen möglich, ohne die Korrektheit des MQTT-Protokolls zu beeinträchtigen.

Erweiterte Eigenschaften

Neben den standardmäßigen Protokollfunktionen und APIs bietet der HiveMQ MQTT Client unter anderem folgende zusätzliche Features:

  • voller Funktionsumfang von MQTT 3.1.1 und MQTT 5,
  • sichere und verschlüsselte Kommunikation mit Transport Layer Security (TLS) inklusive TLS 1.3,
  • MQTT over Websockets,
  • automatisches Reconnect-Handling,
  • Offline-Puffern von Nachrichten,
  • Backpressure-Support,
  • optionale Integration der Dropwizard-Metrics-Bibliothek
  • Integration mit Simple Logging Facade for Java (LF4J) für standardisiertes Logging,
  • Pluggable Thread Pools,
  • HTTP-CONNECT-Unterstützung