【问题标题】:Node MQTT.js problems with RabbitMQRabbitMQ 的节点 MQTT.js 问题
【发布时间】:2015-05-04 11:05:13
【问题描述】:

无法使用 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默认生成一个随机的client id,所以与没有设置client id无关。

【问题讨论】:

    标签: node.js rabbitmq mqtt


    【解决方案1】:

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

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

    【讨论】:

    • 仍然没有骰子:/。这与连接有关。 Blue rhinos 使用 fsockopen,我查看了 repo。这与 MQTT.js 使用的 sock 连接有什么不同?我根本不熟悉套接字,我在机器之间完成的唯一消息传递是 REST http 请求。
    • 你看到连接的消息了吗?
    • 我们可以假设你已经检查了所有明显的东西,比如 netstat -tap |兔子服务器上的grep 1883?兔子服务器上的防火墙配置为接受 tcp 1883?
    【解决方案2】:

    如果您要连接到仅支持 MQTT 3.1(不兼容 3.1.1)的代理,您应该传递这些附加选项:

    {
        protocolId: 'MQIsdp',
        protocolVersion: 3
    }
    

    这已在 RabbitMQ 3.2.4.... 和 Mosquitto

    【讨论】:

      猜你喜欢
      • 2012-06-15
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 2019-08-08
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      相关资源
      最近更新 更多