RabbitMQ& node-amqp - 默认交换不确认

时间:2013-11-27 20:43:18

标签: node.js rabbitmq node-amqp

当我发布到默认交易所时,我似乎无法得到确认。我目前正在使用this post建议的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.');
    });
});

我认为默认交换是一个空字符串的直接交换(所有其他选项都是默认的)。根据{{​​3}},如果confirm选项为true,它将调用提供的回调。我试图自己创建交换,但也没有运气。

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.');
        });
    });
});

我可以使用RabbitMQ网站上的exchange.publish method确认我已成功发布消息。

默认交换是否在publish方法中发出ack消息?我不正确地打电话了吗?

1 个答案:

答案 0 :(得分:0)

  1. 您需要在发布之前连接到队列,只是在发布调用中提供队列名称是不够的。
  2. 您需要将队列绑定到交换机,否则发布将无效。
  3. 类似的东西:

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

    这将使您的消息进入新交换的指定队列,并进行回调。如果你像我一样并且没有正确阅读文档,那么来自publish的回调将发送false表示成功(即errorHasOccured是回调的第一个参数)。