节点MQTT.js RabbitMQ的问题

时间:2015-05-04 11:05:13

标签: node.js rabbitmq mqtt

无法使用node.js mqtt客户端连接到我的RabbitMQ服务器(已启用MQTT适配器)。这些之间是否存在兼容性问题?

我可以使用bluerhinos MQTT PHP库连接到队列,所以我知道队列名称和主机名等是正确的,并且正在正确检索消息

Node.js app

var mqtt = require('mqtt');

var mqttClient = mqtt.connect('mqtt://rabbit:1883');

mqttClient.on('connect', function() {
   console.log("connected");
});

mqttClient.publish('queue', 'message');

PHP     

require("vendor/bluerhinos/phpmqtt/phpMQTT.php");

$mqtt = new phpMQTT("rabbit", 1883, "clientId"); 
if ($mqtt->connect()) {
    $mqtt->publish("queue","Hello World! at ".date("r"),1);
    $mqtt->close();
}

MQTT.js默认生成随机客户端ID,因此它与未设置的客户端ID无关。

2 个答案:

答案 0 :(得分:1)

NodeJS代码将是异步的,因此您可以在连接完成之前调用发布。尝试这样做以确保它在尝试发布之前等待:

var mqtt = require('mqtt');

var mqttClient = mqtt.connect('mqtt://rabbit:1883');

mqttClient.on('connect', function() {
   console.log("connected");
   mqttClient.publish('queue', 'message');
});

答案 1 :(得分:1)

如果要连接到仅支持MQTT 3.1(不符合3.1.1)的代理,则应传递以下附加选项:

{
    protocolId: 'MQIsdp',
    protocolVersion: 3
}

这在RabbitMQ 3.2.4 ....和Mosquitto< 1.3。 Mosquitto版本1.3和1.4可以正常使用。