- es.davy.ai/
- Programación /
- Cómo suscribirse a todos los temas/mensajes utilizando NodeJS mqtt, emqx
Cómo suscribirse a todos los temas/mensajes utilizando NodeJS mqtt, emqx
Estoy escribiendo un suscriptor MQTT en NodeJS utilizando el paquete mqtt. El objetivo de este suscriptor es recibir todos los mensajes que lleguen a cualquier/todos los temas, pero parece que la suscripción a #
(suscribirse a todos los temas) no parece funcionar. Pero cuando reemplazo #
con un nombre de tema real, parece funcionar bien. No estoy seguro de por qué no está funcionando.
PD: el broker que estoy utilizando es emqx.
Aquí está el código a continuación.
const mqtt = require('mqtt');
const TOPIC = '#';
const HOST = process.env.HOST || 'localhost';
const PORT = process.env.PORT || 1883;
const USERNAME = process.env.USERNAME || 'username';
const PASSWORD = process.env.PASSWORD || 'password';
const PROTOCOL = 'mqtt';
const clientOption = {
port: PORT,
host: HOST,
username: USERNAME,
password: PASSWORD,
protocol: PROTOCOL
};
const client = mqtt.connect(clientOption);
console.log(`Conectando a mqtt://${HOST}:${PORT}@${USERNAME} tema:${TOPIC} ...`);
client.on('connect', function () {
console.log(`¡Conectado!`);
client.subscribe(TOPIC, function(err) {
if(err) {
console.error(err);
} else {
console.log(`Suscripción a ${TOPIC} exitosa.`);
}
});
client.on('message', function(topic, message) {
// message is Buffer
console.log(`Mensaje entrante al tema = ${topic} ...`);
console.log(message.toString());
console.log('Preparando mensaje saliente');
const outboundMsg = {...message, source: topic};
console.log('Mensaje saliente a continuación');
console.log(outboundMsg);
});
});
Answer
Comments are closed.
davy.ai
Posible explicación de por qué suscribirse a todos los temas
#
en MQTT no funciona en este códigoPuede haber varias razones por las cuales suscribirse a todos los temas
#
no parece funcionar en el código del suscriptor MQTT proporcionado. Aquí hay algunas posibles explicaciones:La biblioteca del cliente o la implementación del protocolo MQTT utilizada en el código pueden tener algunas limitaciones con respecto a la suscripción a todos los temas. Por ejemplo, algunos clientes MQTT pueden almacenar en búfer demasiados mensajes o consumir demasiados recursos cuando reciben mensajes de todos los temas. Por lo tanto, la especificación del protocolo y algunas bibliotecas de clientes pueden restringir el uso de suscripciones con comodines
#
o agregar algunas limitaciones a ellas (por ejemplo, requerir permiso explícito del broker). Para verificar esto, uno puede consultar la documentación o los problemas de la biblioteca del cliente MQTT utilizada o intentar utilizar una biblioteca de clientes diferente que admita suscripciones con comodines.Puede haber algunos problemas con el código en sí, como opciones o parámetros incorrectos pasados al cliente o manejo incorrecto de los mensajes recibidos de todos los temas. Por ejemplo, el código anterior intenta expandir el objeto
message
en un literal de objeto, lo cual puede no funcionar como se esperaba. Para depurar esto, uno puede intentar registrar más información o capturar y registrar cualquier error que ocurra durante la suscripción o el manejo de mensajes.En general, es importante tener en cuenta que suscribirse a todos los temas
#
en MQTT puede ser una función poderosa pero potencialmente arriesgada, especialmente en sistemas grandes o complejos. Por lo tanto, se recomienda usarla con precaución y con mecanismos adecuados de permisos y autenticación.