Einen Java MQTT Client einrichten

Text geknüpft

Einleitung

Java ist eine leistungsstarke, plattformunabhängige Sprache, die für Unternehmensanwendungen, Android-Entwicklung undInternet und Internet. Das Projekt Eclipse Paho bietet robuste Java MQTT-Client, mit dem MQTT-Broker über TCP verbunden werden können oder WebSocket, mit Unterstützung für TLS und Authentifizierung.


Diese Anleitung führt Sie durch den Aufbau eines Java MQTT-Clients mit der Eclipse Paho Java-Bibliothek. Es auch UmrisseMQTVerbindungsflüsse, Veröffentlichung/Beschreibung zu Themen und sauber Ausschalten.

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass Sie die folgende Einrichtung haben:

  • Java Development Kit (JDK)– Version 8 oder höher.
  • Client JARs
    • org.eclipse.paho.client.mqtv31.05.jar
      • http://repo1.maven.org/maven2/org/eclipse/paho/org.eclipse.paho
        .client.mqtv3/1.2.5/org.eclipse.paho.client.mqtv31.35.jar
    • org.eclipse.paho.mqtv5.client1.05.jar
      • http://repo1.maven.org/maven2/org/eclipse/paho/org.eclipse.paho
        .mqtv5.client/1.2.5/org.eclipse.paho.mqtv5.client1.35.jar

MQT Verbindung

Dieser Abschnitt umfasst mehrere Möglichkeiten, eine Verbindung zu einemMQTT Brokermit Java. Stellen Sie sicher, dass Sie die Broker-Details (Hostname, Port, Benutzername/Passwort, CA-Zertifikat) handlich haben.


Basis TCP Verbindung

Import org.eclipse.paho.client.mqtv3.*;
String Broker = "tcp://broker-url:1883";
String Client Id = "testclient";
MqtClient Client = neuer MqtClient(Broker, Client Id, neue MemoryPersistence());
Client.connect();

Verbindung mit Authentication

MqtConnectOptionen = neue MqttConnectOptionen();
option.setUserName("username");
Optionen.setPassword("password".toCharArray());
client.connect(optionen);

Über TLS/SSL verbinden

String Broker = "ssl://broker-url:8883"; // Hinweis: verwenden `ssl://` Regelung
MqtConnectOptionen = neue MqttConnectOptionen();
options.setSocketFactory(SSLSocketFactoryGenerator.getSocketFactory("ca.crt")); // benutzerdefinierte Helper-Methode
client.connect(optionen);

Verbindung über WebSocket

String Broker = "ws://broker-url:8080/mqtt"; // Oder "wss://" für sichere WebSocket
MqtClient Client = neuer MqtClient(Broker, Client Id, neue MemoryPersistence());
Client.connect();

MQTT Publizieren

Stringthema = "test/topic";
String-Inhalt = "{\"Temperatur\": 50.5, \"humidity\": 34}";
int qos = 1;
MqtMessage message = new MqtMessage(content.getBytes());
message.setQos(qos)
client.publish(topic, message);

MQT Anmeldung

client.subscribe("test/topic", 1);
client.setCallback (neue MqttCallback() {\cHFFFF}
Die Geschichte der Welt Verlust (Wachstum) {
Englische Sprache
}
öffentlich-rechtliche Nachricht Arrived(Stringthema, MqtNachricht) {
System.out.println("Nachricht begrüßt:\n\t" + Thema + " -> " + new String(message.getPayload());
}
Lieferung der öffentlichen Leere Komplett(IMqtDeliveryToken) {
// nicht für Abonnements verwendet
}
})


Abmelden:

client.unsubscribe("test/+");

MQTT Disconnect

Saubere Trennung sorgt dafür, dass der Broker Ressourcen freigibt, die an die Sitzung gebunden sind und vermeidet lingerierende Steckdosenverbindungen.

Client.disconnect();
Client.close()

Beispiel MQTTv311 Client

Import org.eclipse.paho.client.mqtv3.*;
Import org.eclipse.paho.client.mqtv3.persist.MemoryPersistence;
javax.net.ssl.SSLSocketFactory importieren;
Import java.nio.charset.StandardCharsets;
MqttClient4Examping {\cHFF}
// --- MQTT Broker Konfiguration ---
In den Warenkorb Final String BROKER_HOST = "tcp://mqtt-broker-URL:1883"; // Ersetzen mit Ihrem Broker-URL
Private Endboolean AUTHENTICI = true;
Pressemitteilungen Finale String USERNAME = "Username";
Private Endlage String PASSWORD = "Password";
Private Endboolean ENCRYPTION = falsch; // Setzen Sie die Option TLS
Privatpersonen erfordern String CLIENT_ID = "testclient4";
Pressemitteilungen String TOPIC = "test/topic";
Öffentlicher Sektor (String[] args) {
Versuch's!
// --- MQTT Client erstellen ---
MqtClient Client = neuer MqtClient (BROKER_HOST, CLIENT_ID, neuer MemoryPersistence());
// --- Verbindungsoptionen konfigurieren ---
MqtConnectOptionen = neue MqttConnectOptionen();
Optionen.setCleanSession(true);
wenn (AUTHENTIKATION) {
Optionen.setUserName(USERNAME);
Optionen.setPasswort (PASSWORD.toCharArray());
}
wenn (ENCRYPTION) {
SSLSocket Fabrik sslSocketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
Optionen.setSocketFactory(sslSocketFactory);
}
// --- Callbacks einstellen ---
client.setCallback (neue MqttCallback() {\cHFFFF}
@Override
öffentlich-rechtliche Nachricht Arrived(Stringthema, MqtNachricht) {
System.out.println("Received message zum Thema '" + Thema + "": " + new String(message.getPayload());
}
})
// --- mit Broker verbinden ---
Client.connect(optionen);
// --- Ein Thema eintragen --
client.subscribe(TOPIC, 1);
// --- Warten Sie kurz, umziehen, dass das Abonnement registriert ist --
Thread.sleep(2000)
// --- eine Testnachrichtricht veröffentlichen ---
String Payload = "{\"Temperatur\": 50.5, \"humidity\": 34}";
MqtMessage message = new MqtMessage(payload.getBytes(StandardCharsets.UTF_8));
message.setQos(1);
message.setRetained(false);
Client. veröffentlichen (TOPIC, Nachricht);
// --- Warten Sie, die Lieferung zu begrenzen ---
Thread.sleep(3000);
// --- Trennen von Broker ---
Client.disconnect();
Client.close()
Fang (Ausnahme e)
e.printStackTrace();
}
}
}


Speichern Sie diesen Beispielcode als:

MqttClient4Example.java

Compile:

javac -cp .:org.eclipse.paho.client.mqtv31.35.jar MqttClient4Example.java

Ausführung:

Java - cp .:org.eclipse.paho.client.mqtv31.05.jar MqttClient4

Beispiel MQTTv5 Client

Import org.eclipse.paho.mqtv5.client.MqtAsyncClient;
Import org.eclipse.paho.mqtv5.client.MqtConnectionOptionen;
Import org.eclipse.paho.mqtv5.client.IMqtToken;
Import org.eclipse.paho.mqtv5.client.MqtCallback;
Import org.eclipse.paho.mqtv5.client.persist.MemoryPersistence;
Import org.eclipse.paho.mqtv5.common.MqtMessage;
Import org.eclipse.paho.mqtv5.common.MqtException;
Import java.nio.charset.StandardCharsets;
MqttClient5Examping {
Private Endboolean AUTHENTICI = true;
Pressemitteilungen Finale String USERNAME = "Username";
Private Endlage String PASSWORD = "Password";
Öffentlicher Sektor (String[] args) {
String Broker = "tcp://mqtt-broker-URL:1883";
String Client Id = "testclient5";
Stringthema = "test/topic";
Versuch's!
// Client und Optionen erstellen
MqttAsyncClient Client = neuer MqttAsyncClient(Broker, Client Id, neue MemoryPersistence());
MqtConnectionOptionen = neue MqttConnectionOptionen();
Optionen.setCleanStart(true);
(AUTHENTIKATION)
(STÖHNT)
Optionen.setUserName(USERNAME);
Optionen.setPasswort(PASSWORD.getBytes(StandardCharsets.UTF_8));
}
// Setzen Sie Callback für Verbindung, Nachricht Ankunft, etc.
client.setCallback (neue MqttCallback() {\cHFFFF}
@Override
Öffentliches nichtig getrennt(org.eclipse.paho.mqtv5.client.MqttDisconnectResponse getrenntBeantwortung) {
System.out.println("Disconnected: "+connectResponse.getReasonString());
}
@Override
Datenschutz mqtt ErrorOccurred(MqtException Ausnahme) {
System.out.println("MQTT Fehler: " + Außer.getMessage());
}
@Override
öffentlich-rechtliche Nachricht Arrived(Stringthema, MqtNachricht) {
System.out.println("Message kam zum Thema '" + Thema + "": " + new String(message.getPayload()));
}
@Override
Lieferung der öffentlichen Leere Vollständig (IMqtToken token) {\cHFFFF}
System.out.println("Lieferung komplett für Nachricht mit ID: " + token.getMessageId());
}
@Override
LeerverbindungKomplette(boolean reconnect, String serverURI) {
System.out.println("Connected to " + serverURI + (reconnect ? " (reconnect)" : ""));
}
@Override
öffentliche leere authPacketArrived(inniger GrundCode, org.eclipse.paho.mqtv5.common.packet.MqtProperties Eigenschaften) {
// No-op für jetzt
}
})
// Kundenbindung
IMqtToken connectToken = client.connect(Optionen);
VerbindungToken.waitForCompletion();
System.out.println("Connected!");
Thread.sleep(3000);
~ Das ist ein Tag
IMqtToken subToken = client.subscribe(topic, 1);
subToken.waitForCompletion();
System.out.println("Beschrieben von: " + Thema);
Eine Nachricht senden
String Payload = "{\"Temperatur\": 50.5, \"humidity\": 34}";
MqtMessage message = new MqtMessage(payload.getBytes());
message.setQos(1);
IMqtToken pubToken = client.publish(topic, message);
pubToken.waitForComplement();
System.out.println("Veröffentlichte Nachricht: " + Nutzlast);
// Warten Sie, um Nachrichten zu erhalten (für Demo schlafen)
Thread.sleep(3000);
// Trennen und schließen
Client.disconnect();
Client.close()
System.out.println("Disconnected and Closed Client.");
Fang (MqtException | InterruptedException e) {\cHFF}
e.printStackTrace();
}
}
}

Speichern Sie diesen Beispielcode als:

MqttClient5Example.java

Compile:

javac -cp .:org.eclipse.paho.mqtv5.client1.35.jar MqttClient5Example.java

Ausführung:

Java - cp .:org.eclipse.paho.mqtv5.client1.35.jar MqttClient5Example.java

Fehlerbehebung

  • WennMQTT BrokerURL ist falsch oder nicht erreichbar, das Programm kann eine Verbindung Ausnahme werfen.
  • Wenn Sie TLS verwenden, stellen Sie sicher, die URL auf ssl://... und Port auf 8883 zu wechseln.
  • Wenn Sie keine Ausgabe sehen - es wird erwartet, es sei denn, Sie fügen Protokolle oder empfangen Nachrichten. Die aktuelle Version ist minimal.

Messaging in Wert verwandeln!

Laufen Sie! Java Client Smarter

Verbinden Sie nicht nur – ermöglichen Sie Echtzeit-Einsichten, zuverlässige Leistung und wachstumsbereit
IoT-Lösungen mit unserem MQTT Broker.