© Diyana Dimitrova/Shutterstock.com
Flexible Vernetzung mit dem HiveMQ MQTT Client

Effizient, robust und sicher


Eine Vielzahl von Anwendungen setzt mittlerweile auf das Kommunikationsprotokoll MQTT. Das Protokoll findet beispielsweise Einsatz in IoT-Anwendungen wie Industrie 4.0, Connected Cars und Logistik sowie generell bei der Kommunikation zwischen Microservices.

Mit dem Begriff „Internet der Dinge“ verbindet man oft nur eingebettete Geräte. Tatsächlich umfassen typische Anwendungen eine Vielfalt von Systemen, z. B. Steuergeräte, Gateways, mobile Geräte, Backend-Systeme und eine Vielzahl weiterer Microservices. Aufgrund der Diversität dieser Systeme erfordert ihre Vernetzung über das Internet eine robuste und plattformübergreifende Kommunikation. Hier kommt MQTT ins Spiel.

Bei MQTT handelt es sich um ein Publish/Subscribe-Protokoll, das sich sehr flexibel für die zuvor genannten Anwendungsfälle einsetzen lässt. Der HiveMQ MQTT Client ermöglicht die zuverlässige Vernetzung diverser Applikationen und Geräte über MQTT. Die Bibliothek lässt sich leicht in alle Java-Projekte integrieren und setzt ein besonderes Augenmerk auf Effizienz, sodass sie sich für den Einsatz im gesamten Spektrum von Embedded-Geräten bis hin zu Backend-Systemen eignet.

Sie ist über Maven Central verfügbar und kann somit als Dependency über Maven, Gradle oder ähnliche Build-Tools sehr leicht in Projekte eingebunden werden. Entwickelt wurde die unter Apache 2 lizenzierte Open-Source-Bibliothek von HiveMQ – den Entwicklern des gleichnamigen Enterprise MQTT Broker [1] – sowie von BMW Car IT. Die Weiterentwicklung ist sehr agil, jeder Interessierte kann sich über GitHub beteiligen und Feedback abgeben.

MQTT behandelt alle Applikationen und Geräte als MQTT-Clients, die über einen MQTT Broker bidirektional miteinander kommunizieren können. Clients können sowohl Nachrichten senden als auch empfangen. Das Senden wird als Publishen bezeichnet.

Nachrichten werden mit Topics gepublisht – Clients empfangen dann Nachrichten mit bestimmten Topics, indem sie sich zuvor mit Topic-Filtern beim Broker subscriben. MQTT bietet drei Quality-of-Service-(QoS-)Level, die unterschiedliche Nachrichtenzustellungsgarantien auch bei Verbindungsunterbrechungen gewährleisten: at most once, at least once und exactly once.

Für jede Nachricht kann je nach Anwendungsfall das passende QoS-Level gewählt werden.

Die HiveMQ-MQTT-Client-Bibliothek implementiert alle Features der neuesten MQTT-Version: MQTT 5. Die MQTT-5-Spezifikation wurde Ende 2017 erstmals veröffentlicht und schließlich Anfang 2019 als OASIS- und ISO-Standard bestätigt. Die Version 5 komplettiert die Vorgängerversion 3.1.1 und ist für zeitgemäße IoT-Anwendungsfälle optimiert. Natürlich wird auch die noch weit verbreitete Vorgängerversion durch den HiveMQ MQTT Client unterstützt.

Damit ist der HiveMQ MQTT Client mit allen aktuellen MQTT Brokers kompatibel. Für neue Projekte empfiehlt sich die Verwendung von MQTT 5. Die wichtigsten Neuerungen sind:

  • Shared Subscriptions für clientseitiges Load Balancing, wobei Nachrichten auf bestimmten Topics auf eine Gruppe mehrerer MQTT-Clients aufgeteilt werden.

  • Flow Control, die Backpressure Handling ermöglicht, also Schutz von Client und Broker vor einer Überlast zu vieler gleichzeitiger Nachrichten.

  • Session and Message Expiry Intervals, die eine feingranulare Steuerung der maximalen Gültigkeit von Sessions und Nachrichten ermöglichen.

  • Diverse Metadaten und nutzerdefinierbare Metadaten, sogenannte User Properties.

  • Negative Acknowledgements für eine bessere Behandlung einzelner Fehler, wie beispielsweise abgelehnte Nachrichten.

  • Topic Aliase, die die benötigte Netzwerkbandbreite für lange Topic-Namen verringern.

  • Request/Response über das Publish/Subscribe-Protokoll: Im Gegensatz zum klassischen Request/Response ermöglicht MQTT die Entkoppelung von Requester und Responder.

Auf die Umsetzung dieser Features mit der HiveMQ-MQTT-Client-Bibliothek wird später noch genauer eingegangen. Generell legt die Bibliothek neben kompletter Unterstützung der MQTT-Spezifikation großen Wert auf Leichtgewichtigkeit und das API-Design. Letzteres folgt folgendem Prinzip:

„APIs should be easy to use and hard to misuse. It should be easy to do simple things; possible to do complex things; and impossible, or at least difficult, to do wrong things.“ [2]

Ganz diesem Zitat gemäß bietet der HiveMQ MQTT Client sehr viele und komplexe Konfigurationsmöglichkeiten, die jedoch nur bei Bedarf verwendet werden müssen; größtenteils werden automatisch sinnvolle Standardwerte verwendet. Damit lässt sich Anwendungscode sowohl einfach halten als auch für bestimmte Teile detailliert konfigurieren. Ermöglicht wird diese Flexibilität durch den konsistenten Einsatz eines Entwurfsmusters: kontextsensitives, fluides Builder-Pattern [3]. Das Fluent API unterstützt hier bei den im jeweiligen Kontext möglichen Operationen. Außerdem sorgt das Builder-Pattern für eine gute Lesbarkeit, Verständlichkeit und Robustheit des Codes, da alle Parameter einen sprechenden Na...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang