Configuración de un cliente MQTT Java

Texto copiado

Introducción

Java es un lenguaje potente e independiente de plataformas comúnmente utilizado para aplicaciones empresariales, desarrollo Android, yPlataformas IoT. El proyecto Eclipse Paho proporciona una robusta Java MQTT cliente que se puede utilizar para conectarse a los corredores MQTT sobre TCP o WebSocket, con soporte para TLS y autenticación.


Esta guía te lleva a través de la construcción de un cliente Java MQTT usando la biblioteca Eclipse Paho Java. It también esbozosMQTTflujos de conexión, publicación/suscripción a temas, y desconectar.

Pre-requisitos

Antes de comenzar, asegúrate de tener la siguiente configuración:

  • Java Development Kit (JDK)– Versión 8 o posterior.
  • Cliente JARs
    • org.eclipse.paho.client.mqttv3-1.2.5.jar
      • https://repo1.maven.org/maven2/org/eclipse/paho/org.eclipse.paho
        .client.mqttv3/1.2.5/org.eclipse.paho.client.mqttv3-1.2.5.jar
    • org.eclipse.paho.mqttv5.client-1.2.5.jar
      • https://repo1.maven.org/maven2/org/eclipse/paho/org.eclipse.paho
        .mqttv5.client/1.2.5/org.eclipse.paho.mqttv5.client-1.2.5.jar

MQTT Conectar

Esta sección cubre múltiples maneras de conectarse a unMQTT brokerusando Java. Asegúrese de tener los detalles del corredor (nombre de host, puerto, nombre de usuario/password, certificado CA) útiles.


Basic TCP Conexión

import org.eclipse.paho.client.mqttv3.*;
Interventor de String = "tcp://broker-url:1883";
cliente String Id = "testclient";
MqttClient client = nuevo MqtClient(broker, cliente Id, new MemoryPersistence());
cliente.connect();

Conectarse con la autenticación

MqttConnectOptions options = nuevo MqttConnectOptions();
options.setUserName("nombre de usuario");
options.setPassword("password".toCharArray());
cliente.connect(options);

Conexión sobre TLS/SSL

String broker = "ssl://broker-url:8883"; // Nota: use `ssl://` esquema
MqttConnectOptions options = nuevo MqttConnectOptions();
options.setSocketFactory(SSLSocketFactoryGenerator.getSocketFactory("ca.crt")); // método de ayuda personalizada
cliente.connect(options);

Conectar a través de WebSocket

Interventor de String = "ws://broker-url:8080/mqtt"; // O "wss://" para WebSocket seguro
MqttClient client = nuevo MqtClient(broker, cliente Id, new MemoryPersistence());
cliente.connect();

MQTT Publish

Tema de cuerda = "test/topic";
Contenido de cuerda = "{\"temperatura\": 50.5, \"humidity\": 34}";
int qos = 1;
MqttMessage message = nuevo MqttMessage(content.getBytes());
message.setQos(qos);
client.publish(topic, message);

MQTT Suscríbete

cliente.subscribe("test/topic", 1);
client.setCallback(new MqttCallback() {
conexión de vacío público Perdido(Causa potencial) {
// mango desconexión
}
mensaje de vacío público Llegada(Tema de la cuerda, MqtMessage message) {
System.out.println("Message received:\n\t" + topic + " - título " + nuevo String(message.getPayload()));
}
públicos Complete(IMqttDeliveryToken token) {
// no utilizado para suscripciones
}
});


Para darse de baja:

cliente.unsubscribe("test/+");

Desconexión MQTT

La desconexión limpia asegura que el corredor libera recursos vinculados a la sesión y evita las conexiones de toma de corriente.

cliente.disconnect();
cliente.close();

Cliente MQTTv311

import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
importar javax.net.ssl.SSLSocketFactory;
importar java.nio.charset.StandardCharsets;
clase pública MqttClient4Example {}
// - Configuración de Broker MQTT ---
static final String BROKER_HOST = "tcp://mqtt-broker-URL:1883"; // Reemplazar con su URL de broker
AUTHENTICATION final booleana privada = true;
final estático privado String USERNAME = "Username";
final estática privada PASSWORD = "Password";
privada estática final booleano ENCRYPTION = falso; // Establecer verdadero para habilitar TLS
final estática privada CLIENT_ID = "testclient4";
ático privado final String TOPIC = "test/topic";
public static void main(String[] args) {
Inténtalo.
// - Crear cliente MQTT ---
MqttClient client = new MqtClient(BROKER_HOST, CLIENT_ID, new MemoryPersistence());
// - Opciones de conexión de configuración ---
MqttConnectOptions options = nuevo MqttConnectOptions();
options.setCleanSession(true);
(AUTHENTICATION) {
options.setUserName(USERNAME);
options.setPassword(PASSWORD.toCharArray());
}
si (ENCRYPTION) {
SSLSocket Fábrica sslSocketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
options.setSocketFactory(sslSocketFactory);
}
// - ¿Qué?
client.setCallback(new MqttCallback() {
@Override
mensaje de vacío público Llegada(Tema de la cuerda, MqtMessage message) {
System.out.println("Recibido mensaje sobre tema '" + tema + ": " + nuevo String(message.getPayload()));
}
});
- ...conéctate con Broker...
cliente.connect(options);
// - Suscribe un tema...
cliente.subscribe(TOPIC, 1);
// -...espera brevemente para asegurar que la suscripción está registrada -...
Thread.sleep(2000);
// - Publicar un mensaje de prueba ---
Carga útil de cuerda = "{\"temperatura\": 50.5, \"humidity\": 34}";
MqttMessage message = nuevo MqttMessage(payload.getBytes(StandardCharsets.UTF_8));
message.setQos(1);
message.setRetained(false);
cliente. publicar (TOPIC, mensaje);
Espera a permitir la entrega...
Thread.sleep(3000);
- Desconéctate de Broker...
cliente.disconnect();
cliente.close();
} catch (Exception e) {}
e.printStackTrace();
}
}
}


Guarda este código de muestra como:

MqttClient4Example.java

Compile:

javac -cp .:org.eclipse.paho.client.mqttv3-1.2.5.jar MqttClient4Example.java

Ejecutar:

java -cp .:org.eclipse.paho.client.mqttv3-1.2.5.jar MqttClient4Example

Muestra MQTTv5 Cliente

import org.eclipse.paho.mqttv5.client.MqttAsyncClient;
import org.eclipse.paho.mqttv5.client.MqtConnectionOptions;
Importar org.eclipse.paho.mqttv5.client.IMqttoToken;
import org.eclipse.paho.mqttv5.client.MqttCallback;
import org.eclipse.paho.mqttv5.client.persist.MemoryPersistence;
importa org.eclipse.paho.mqttv5.common.MqttMesage;
import org.eclipse.paho.mqttv5.common.MqtException;
importar java.nio.charset.StandardCharsets;
clase pública MqttClient5Example {}
AUTHENTICATION final booleana privada = true;
final estático privado String USERNAME = "Username";
final estática privada PASSWORD = "Password";
public static void main(String[] args) {
Interventor de String = "tcp://mqtt-broker-URL:1883";
cliente String Id = "testclient5"
Tema de cuerda = "test/topic";
Inténtalo.
// Crear cliente y opciones
MqttAsyncClient client = nuevo MqttAsyncClient(broker, cliente Id, new MemoryPersistence());
MqttConnectionOptions options = nuevo MqttConnectionOptions();
options.setCleanStart(true);
(AUTHENTICATION)
{}
options.setUserName(USERNAME);
options.setPassword(PASSWORD.getBytes(StandardCharsets.UTF_8));
}
// Ajuste el callback para la conexión, la llegada del mensaje, etc.
client.setCallback(new MqttCallback() {
@Override
vacío público desconectado(org.eclipse.paho.mqttv5.client.MqtDisconnectResponse disconnectResponse) {
System.out.println("Disconnected: " + disconnectResponse.getReasonString());
}
@Override
vacío público mqtt ErrorOccurrido(Excepción MqtException) {
System.out.println("MQTT Error: " + excepción.getMessage());
}
@Override
mensaje de vacío público Llegada(Tema de la cuerda, MqtMessage message) {
System.out.println("Message llegó al tema '" + tema + ": " + nuevo String(message.getPayload()))));
}
@Override
públicos Complete(IMqttToken token) {
System.out.println("Delivery complete for message with ID: " + token.getMessageId());
}
@Override
conexión de vacío públicoCompleta(reconexión de boomlean, servidor de String) {
System.out.println("Connected to " + serverURI + (reconnect? " (reconnect)" : ""));
}
@Override
public void authPacketArrived(int reasonCode, org.eclipse.paho.mqttv5.common.packet.MqtProperties properties) {
// No-op por ahora
}
});
// Conectar cliente
IMqttToken connectToken = cliente.connect(opciones);
connectToken.waitForCompletion();
System.out.println("Connected!");
Thread.sleep(3000);
// Suscribirse al tema
IMqttToken subToken = cliente.subscribe(topic, 1);
subToken.waitForCompletion();
System.out.println("Suscrito a: " + tema);
// Publicar un mensaje
Carga útil de cuerda = "{\"temperatura\": 50.5, \"humidity\": 34}";
MqttMessage message = nuevo MqttMessage(payload.getBytes());
message.setQos(1);
IMqtToken pubToken = cliente.publish(topic, message);
pubToken.waitForCompletion();
System.out.println("Published message: " + payload);
// Espera a recibir mensajes (sleep for demo)
Thread.sleep(3000);
// Desconectar y cerrar
cliente.disconnect();
cliente.close();
System.out.println(" Cliente desconectado y cerrado.");
} catch (MqtException ← InterruptedException e) {}
e.printStackTrace();
}
}
}

Guarda este código de muestra como:

MqttClient5Example.java

Compile:

javac -cp .:org.eclipse.paho.mqttv5.client-1.2.5.jar MqttClient5Example.java

Ejecutar:

java -cp .:org.eclipse.paho.mqttv5.client-1.2.5.jar MqttClient5Example.java

Solución de problemas

  • SiMQTT brokerURL es incorrecta o no alcanzable, el programa puede lanzar una excepción de conexión.
  • Si está usando TLS, asegúrese de cambiar la URL a ssl://... y puerto a 8883.
  • Si no ve ninguna salida, se espera a menos que agregue registros o reciba mensajes. La versión actual es mínima.

¡Convierte el mensaje en valor!

Corre. Java Client Smarter

No sólo conecte — active las ideas en tiempo real, el rendimiento confiable y el crecimiento listo
Soluciones de IoT con nuestro corredor de MQTT.