Не удалось подключиться к брокеру rabbitmq через клиент nodejs

Я использую amqplib для создания клиентов amqp. он отлично работает при работе на локальном хосте, но когда я меняю его на IP-адрес сервера 192.168.1.44, я получаю сообщение об ошибке, указывающее, что объект conn не определен.

это код клиента

var amqp = require('amqplib/callback_api');
amqp.connect('amqp://guest:[email protected]: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)

person Arf Wael    schedule 26.11.2017    source источник
comment
Попробуйте console.log свою errпеременную. Похоже, у вас соединение не работает...   -  person semanser    schedule 26.11.2017


Ответы (1)


Я исправил это, создав нового пользователя на брокере rabbitmq. гостевой пользователь работает только с локальным хостом. для получения дополнительной информации см. https://stackoverflow.com/a/26820152/7236105.

person Arf Wael    schedule 26.11.2017
comment
Чтобы было ясно, проблема в том, что ваш метод connect не возвращал соединение, потому что он не мог подключиться. Ваш код был неправильным при попытке использовать объект conn перед проверкой объекта err, и если бы вы правильно проверили объект err, в этом вопросе не было бы необходимости :) - person theMayer; 28.11.2017
comment
@theMayer Нет, на самом деле этот же пример вы можете найти в документации rabbitmq, но в нем не указано, что делать, когда мы меняем IP-адрес в методе подключения. Я использовал гостевого пользователя по умолчанию в брокере rabbitmq, но я понял, что этот конкретный пользователь может получить доступ к брокеру только через localhost. для записи я проверил трассировку стека err, и это бесполезно. реальная проблема заключается в том, что я сказал выше. вам нужно только создать нового пользователя с помощью этих команд rabbitmqctl add_user test test rabbitmqctl set_user_tags test administrator rabbitmqctl set_permissions -p / test ".*" ".*" ".*" - person Arf Wael; 29.11.2017
comment
Это ограничение гостя четко сформулировано в документации. Я не уверен точно, где именно из головы, но это там. Но, как я уже сказал, похоже, что это одна из многих проблем с аутентификацией, которые могут возникнуть. Если объект err не дает осмысленного ответа (я никогда не использовал этот конкретный клиент) - возможно, вы могли бы создать отчет об ошибке там? - person theMayer; 29.11.2017