2013-11-27 2 views
0

Кажется, я не могу получить подтверждение, когда я публикую для обмена по умолчанию. В настоящее время я использую основную ветвь node-amqp, предложенную this post.RabbitMQ & node-amqp - обмен по умолчанию не подтвержден

Код:

var amqp = require('amqp'); 
var conn = amqp.createConnection({ host: 'localhost' }); 

conn.once('ready', function() { 
    conn.publish('test_queue', 'test message', { /* empty options */ }, function (a, b) { 
     console.log('Publish complete.'); 
    }); 
}); 

Я считаю, что обмен по умолчанию является прямым обменом с пустой строкой (все остальные параметры по умолчанию). Согласно exchange.publish method, если опция подтверждения верна, она будет вызывать обратный вызов. Я попытался создать обмен самостоятельно, но не повезло и там.

var amqp = require('amqp'); 
var conn = amqp.createConnection({ host: 'localhost' }); 

conn.once('ready', function() { 
    conn.exchange('', { confirm: true }, function (exchange) { 
     exchange.publish('test_queue', 'test message', { /* empty options */ }, function (a, b) { 
      console.log('Publish complete.'); 
     }); 
    }); 
}); 

Я могу подтвердить, что я успешно публиковать сообщения, используя в basic python receive script с сайта RabbitMQ.

Включает ли обмен по умолчанию сообщение ack в методе публикации? Я называю это неправильно?

ответ

0
  1. Перед публикацией необходимо подключиться к очереди, просто не указывая имя очереди в вызове публикации.
  2. Вам необходимо привязать очередь к обмену, или публикация не будет работать.

Что-то вроде:

connection.queue("test_queue", function(q) { 
    q.bind(exchange, function() { 
     exchange.publish(...); 
    } 
}); 

Это сделает ваше сообщение перейти в указанную очередь с новым обменом, и обратный вызов будет. Если вы похожи на меня и не читали документацию должным образом, а не то, что обратный вызов из публикации отправит false, чтобы указать успех (т. Е. ErrorHasOccured является первым аргументом для обратного вызова).

+0

Я не уверен на 100%, но я думаю, что это не относится к обмену по умолчанию (очереди привязаны к нему по умолчанию). Когда я пытаюсь сделать это, я получаю ошибку 403 ", которая не разрешена при ошибке обмена по умолчанию". –

+1

Да, дело в том, что вам нужно создать другой обмен, поскольку по умолчанию не подтверждается, что сообщение было успешно опубликовано. –

Смежные вопросы