使用RabbitMQ节点MQTT.js问题

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

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

Node.js应用程序

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没有关系。

NodeJS代码将是asynchronous的,所以你可能在连接完成之前调用发布。 尝试这个以确保它在尝试发布之前等待:

 var mqtt = require('mqtt'); var mqttClient = mqtt.connect('mqtt://rabbit:1883'); mqttClient.on('connect', function() { console.log("connected"); mqttClient.publish('queue', 'message'); }); 

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

 { protocolId: 'MQIsdp', protocolVersion: 3 } 

这在RabbitMQ 3.2.4 ….和Mosquitto <1.3上得到证实 。 蚊子版本1.3和1.4没有这些工作正常。