【问题标题】:Could not connect to rabbitmq broker via nodejs client无法通过 nodejs 客户端连接到 rabbitmq 代理
【发布时间】:2017-11-26 10:38:54
【问题描述】:

我正在使用 amqplib 来创建 amqp 客户端。它在本地主机上运行时工作正常,但是当我将其更改为服务器的 IP 地址 192.168.1.44 时,我收到一个错误,表明 conn 对象未定义。

这是客户的代码

var amqp = require('amqplib/callback_api');
amqp.connect('amqp://guest:guest@192.168.1.44:5672', function(err, conn) { 
    conn.createChannel(function(err, ch) {
    var q = 'hello';
    ch.assertQueue(q, {durable: false});
    console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", q);
    ch.consume(q, function(msg) {
    console.log(" [x] Received %s", msg.content.toString());
    }, {noAck: true});
  });
});

这是错误信息

/home/pi/Desktop/mqtt_example/receive.js:14
conn.createChannel(function(err, ch) {
    ^

TypeError: Cannot read property 'createChannel' of undefined
   at /home/pi/Desktop/mqtt_example/receive.js:14:5
   at /home/pi/Desktop/mqtt_example/node_modules/amqplib/callback_api.js:16:10
   at /home/pi/Desktop/mqtt_example/node_modules/amqplib/lib/connect.js:164:12
   at bail (/home/pi/Desktop/mqtt_example/node_modules/amqplib/lib/connection.js:176:5)
   at afterStartOk (/home/pi/Desktop/mqtt_example/node_modules/amqplib/lib/connection.js:219:7)
   at /home/pi/Desktop/mqtt_example/node_modules/amqplib/lib/connection.js:160:12
   at Socket.recv (/home/pi/Desktop/mqtt_example/node_modules/amqplib/lib/connection.js:498:12)
   at Object.onceWrapper (events.js:314:30)
   at emitNone (events.js:105:13)
   at Socket.emit (events.js:207:7)
   at emitReadable_ (_stream_readable.js:502:10)
   at emitReadable (_stream_readable.js:496:7)
   at addChunk (_stream_readable.js:263:7)
   at readableAddChunk (_stream_readable.js:239:11)
   at Socket.Readable.push (_stream_readable.js:197:10)
   at TCP.onread (net.js:588:20)

【问题讨论】:

  • 尝试console.log你的errvariable。看起来你的连接不起作用...

标签: node.js rabbitmq node-amqplib


【解决方案1】:

我通过在 rabbitmq 代理上创建一个新用户来修复它。来宾用户仅适用于 localhost。更多详情请见https://stackoverflow.com/a/26820152/7236105

【讨论】:

  • 要清楚,问题是您的connect 方法没有返回连接,因为它无法连接。您的代码在检查 err 对象之前尝试使用 conn 对象是不正确的,并且如果您正确检查了 err 对象,则不需要这个问题:)
  • @theMayer 不,事实上,你可以在 rabbitmq 文档中找到这个相同的例子,但它没有指定当我们在 connect 方法中更改 IP 时要做什么。我在 rabbitmq 代理中使用默认的来宾用户,但我意识到这个特定用户只能通过 localhost 访问代理。作为记录,我确实检查了err 堆栈跟踪,但它没有用。真正的问题是我上面所说的。您只需要使用这些命令创建一个新用户rabbitmqctl add_user test test rabbitmqctl set_user_tags test administrator rabbitmqctl set_permissions -p / test ".*" ".*" ".*"
  • 文档中明确说明了访客的这种限制。我不确定我的头顶到底在哪里,但它就在那里。但正如我所说,这似乎是您可能遇到的众多身份验证问题之一。如果“err”对象没有产生有意义的答案(我从未使用过这个特定的客户端)——也许你可以在那里提出错误报告?
猜你喜欢
  • 1970-01-01
  • 2018-04-23
  • 2019-09-05
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
  • 1970-01-01
  • 2017-03-08
  • 1970-01-01
相关资源
最近更新 更多