【问题标题】:mosquitto+mqtt.js got "Connection refused: Not authorized"mosquitto+mqtt.js 得到“连接被拒绝:未授权”
【发布时间】:2017-08-18 02:06:21
【问题描述】:

我在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 重新启动了几次,这没有帮助。防火墙已关闭,日志文件保持为空。 状态截图:

有人可以帮忙吗?

更新:

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

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

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

解决方案

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

【问题讨论】:

  • NodeJS 客户端尝试连接时 mosquitto 日志中的内容是什么?
  • 正如我所说..奇怪的是日志是空的,不确定日志功能是否无法运行。
  • 停止 mosquitto 并在 cmd 行仅使用 -v 手动运行它
  • 好吧,如果我使用 mosquitto -v 在端口 1884 上启动另一个 mosquitto 进程,一切正常。但不是 mosquitto 服务,它仍然显示在端口 1883 上未授权。

标签: javascript node.js mqtt mosquitto


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你需要在mqtt connect方法中添加授权信息。就像这样。

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

    【讨论】:

    • 您好,欢迎来到 StackOverflow!请查看How to Ask 指南,了解如何提出好的和明确的问题。
    • 但是我设置了anonymous true,它应该允许匿名连接。
    【解决方案3】:

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

    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()
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-16
      • 2014-04-07
      • 1970-01-01
      • 2017-09-28
      • 2019-10-22
      • 2015-06-20
      • 1970-01-01
      • 2015-11-23
      相关资源
      最近更新 更多