0

当我发布到默认交易所时,我似乎无法得到确认。我目前正在使用这篇文章建议的 node-amqp 的主分支建议的 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 方法,如果确认选项为真,它将调用提供的回调。我试图自己创建交易所,但也没有运气。

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 网站上的基本 python 接收脚本

默认交换是否在发布方法中发出确认消息?我叫错了吗?

4

1 回答 1

0
  1. 您需要在发布之前连接到队列,仅在发布调用中提供队列名称是不够的。
  2. 您需要将队列绑定到交换器,否则发布将不起作用。

就像是:

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

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

于 2014-01-31T13:26:02.810 回答