2017-11-26 12 views
-1

amqplib을 사용하여 amqp 클라이언트를 만듭니다. localhost에서 실행할 때 제대로 작동하지만 서버의 IP 주소 192.168.1.44로 변경하면 conn 객체가 정의되지 않았 음을 나타내는 오류가 발생합니다. nodejs 클라이언트를 통해 rabbitmq broker에 연결할 수 없습니다.

는 클라이언트의 코드

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) 
+0

당신의'err' 변수를'console.log'하십시오. 연결이 작동하지 않는 것처럼 보입니다 ... – semanser

답변

0

나는 rabbitmq 브로커에 새로운 사용자를 생성하여 고정합니다. 게스트 사용자는 localhost에서만 작동합니다. 자세한 내용은 https://stackoverflow.com/a/26820152/7236105을 참조하십시오.

+0

분명히 말하자면, 문제는 연결에 실패했기 때문에'connect' 메서드가 연결을 반환하지 않는 것입니다. 당신의 코드는'err' 객체를 검사하기 전에'conn' 객체를 사용하려고 시도하는 과정에서 올바르지 않습니다. 그리고'err' 객체를 제대로 검사했으면이 질문이 필요 없을 것입니다. – theMayer

+0

@theMayer 아니요, 사실 이 같은 예제는 rabbitmq 문서에서 찾을 수 있지만 connect 메소드에서 IP를 변경할 때 수행 할 작업을 지정하지 않았습니다. 나는 rabbitmq 브로커의 by default guest 사용자를 사용하고 있었지만이 특정 사용자는 localhost를 통해서만 브로커에 액세스 할 수 있다는 것을 알았습니다. 기록을 위해 나는'err' 스택 추적을 확인했는데 좋지 않습니다. 진짜 문제는 위에서 말한 것입니다. 당신은이 명령들로 새로운 사용자를 생성하기 만하면된다. 'rabbitmqctl add_user 테스트 테스트 rabbitmqctl set_user_tags 테스트 관리자 rabbitmqct set_permissions -p/test ". *". * "". * "' –

+0

이 게스트의 제한은 명확하게 표현되어있다. 문서에서. 나는 내 머리 꼭대기에서 정확히 어디 있는지는 모르겠지만 거기에있다. 그러나 제가 말한 것처럼, 그것은 당신이 가질 수있는 많은 인증 문제 중 하나입니다. "err"객체가 의미있는 응답을 생성하지 않는다면 (필자는이 특정 클라이언트를 사용한 적이 없습니다) 아마도 거기에 버그 보고서를 올릴 수 있습니까? – theMayer