2016-06-14 7 views
0

Я создал простое приложение, которое отправляет сообщение клиенту с сервера RabbitMQ. Для этого я создал код отправителя, как показано ниже.NOT_FOUND - no queue 'node-topic-queue-one' in vhost '/'

var amqp=require('amqp'); 

var connection = amqp.createConnection({host:'localhost',login:'guest',password:'guest'}); 

connection.on('ready', function() { 
// There is no need to declare type, 'topic' is the default: 

var exchange = connection.exchange('node-topic-exchange'); 

console.log("publishing messages"); 
exchange.publish("topic_a.subtopic_a", {msg:'First Message'}); 
exchange.publish("topic_a.subtopic_b", {msg:'Second Message'}); 
exchange.publish("topic_b.subtopic_b", {msg:'Third Message'}); 
}); 

connection.on('error',function (err) { 
    console.log('an error '+err); 
}); 

и моей стороне приемника код, как показано ниже:

var amqp=require('amqp'); 
var connection = amqp.createConnection({host:'localhost',login:'guest',password:'guest'}); 
connection.on('ready', function() { 
    // There is no need to declare type, 'topic' is the default: 
    var exchange = connection.exchange('node-topic-exchange'); 
    // Consumer: 
    var queue = connection.queue('node-topic-queue-one'); 
    queue.bind(exchange, "topic_a.*"); 
    queue.subscribe(function (message) { 
    // Get original message string: 
    console.log('Message : ' + message.msg); 
    }); 
    }); 
    connection.on('error',function (err) { 
console.log('an error '+err); 
}); 

проблема в том, that..it выдает ошибку, как, что

D:\node example\RabbitMQ Example>node worker1.js an error

Error: NOT_FOUND - no exchange 'node-topic-exchange' in vhost '/' an error Error: read ECONNRESET

Пожалуйста, помогите решить эту проблему вне .. ...

+0

Я думаю, что вам нужно использовать узел. js event driven approach: «Обмен будет выдавать« открытое »событие, когда оно будет объявлено окончательно». (https://github.com/postwait/node-amqp#connectionexchangename-options-opencallback) - обмен не объявляется, когда вы пытаетесь его использовать. – Sigismondo

+0

It works ,, !! но также я получил ту же ошибку в приемной стороне ... @ Sigismondo –

+0

та же история там, и для очереди, как хорошо! На других языках (например, java) вам нужно явно «объявлять» обмены и очереди (т. Е. Создавать, если не существует), и для хорошей развязки своей хорошей практики делать это как для производителей, так и для потребителей. – Sigismondo

ответ

1

Вам необходимо использовать метод node.js, управляемый событиями: "An exchange will emit the 'open' event when it is finally declared." - обмен еще не объявлен когда вы пытаетесь его использовать.

На приемной стороне вы должны сделать то же самое для обмена и очередь: "A queue will call the callback given to the connection.queue() method once it is usable"

Для полноты докладывает пример здесь:

var q = connection.queue('my-queue', function (queue) { 
    console.log('Queue ' + queue.name + ' is open'); 
});