mosquitto + mqtt.js收到“拒绝连接:未授权”

时间:2017-08-18 02:06:21

标签: javascript node.js mqtt mosquitto

我在CentOS7上构建了mosquitto,并在mqtt.js基础上构建了一个node.js客户端,并使用

进行安装
yum install mosquitto mosquitto-clients

本地测试

> mosquitto_sub -h localhost -t test

> mosquitto_pub -h localhost -t test -m "hello world"

工作正常,但当我跑:

var mqtt = require('mqtt')
var client  = mqtt.connect('mqtt://192.168.1.70')

client.on('connect', function () {
  client.subscribe('presence')
  client.publish('presence', 'Hello mqtt')
})

client.on('message', function (topic, message) {
  // message is Buffer
  console.log(message.toString())
  client.end()
})

错误:连接被拒绝:未经授权

mosquitto.conf 就像:

pid_file /var/run/mosquitto.pid

persistence true
persistence_location /var/lib/mosquitto/

log_dest file /var/log/mosquitto/mosquitto.log
allow_anonymous true

我使用 systemctl restart mosquitto 重启几次,这没有用。防火墙已关闭,日志文件保持空白。 状态截图: enter image description here

有人可以帮忙吗?

更新

事实证明,当状态显示Active: active (exited)时,蚊子服务会以某种方式被破坏。 我使用mosquitto -p 1884 -v cmd在端口1884上运行另一个mosquitto进程,它工作正常。然后我尝试使用重新加载conf > /etc/init.d/mosquitto reload。它给了我

重新加载mosquitto配置(通过systemctl):mosquitto.service的作业无效。                                                            [FAILED]

所以蚊子服务有问题。 不是最终解决方案,但我设法通过remove-reboot-install过程修复此问题,状态变为绿色,如下所示:

Correct mosquitto status

我设法找出它不起作用的原因。我已经在我的服务器上安装了rabbitmq,它使用了“rabbitmq_mqtt”,它消耗了端口1883.重新分配端口将解决这个问题。

3 个答案:

答案 0 :(得分:1)

我设法找出原因。我已经在服务器上安装了rabbitmq,它使用其消耗端口1883的“ rabbitmq_mqtt”。重新分配端口将解决此问题。问题很简单,但是,CLI应该给了我更多信息。

答案 1 :(得分:0)

添加用于客户端连接的授权详细信息

var mqtt = require('mqtt')
var client  = mqtt.connect('mqtt://192.168.1.70', {
                              username: '<username>', 
                              password: '<password>'
              });

client.on('connect', function () {
  client.subscribe('presence')
  client.publish('presence', 'Hello mqtt')
})

client.on('message', function (topic, message) {
  // message is Buffer
  console.log(message.toString())
  client.end()
})

答案 2 :(得分:-1)

您需要将授权信息添加到mqtt connect方法。就像这样。

var client=mqtt.connect("ws://192.168.1.1", {
            username: "yourUsername",
            password: "yourPassword"
        }