RabbitMQ 发布到 Exchange 确认

RabbitMQ Publish to Exchange Confirmation

我想 return 在关闭 AMQP 连接之前检索消息已成功发布到交换的确认信息。目前,我正在使用超时功能来允许在关闭连接之前发布消息。这不是正确的方法。有人可以帮助检索确认信息,以便我可以在成功发布后关闭连接吗?

我使用的代码如下:

function toExchange(msg)
{
    amqp.connect('amqp://localhost:5672', function(err, conn) //local connection
    {
        conn.createChannel(function(err, ch)
        {
            var exchange = 'MessageExchange';
            ch.assertExchange(exchange, 'fanout', {durable: true});
            ch.publish(exchange, '', new Buffer(msg));
            console.log("Sent to Exchange: %s", msg);
        });
        setTimeout(function() { conn.close(); }, 5000);
    });
}

您可以使用名为 "Publisher confirms" 的 RabbitMQ 扩展。这里有更多信息:https://www.rabbitmq.com/confirms.html#publisher-confirms.

消息发布到交换器时不会通知您,但消息发布并路由到所有队列时https://www.rabbitmq.com/confirms.html#when-publishes-are-confirmed

如果您在 nodeJS 中使用 amqplib,您可以使用这段代码:https://www.squaremobius.net/amqp.node/channel_api.html#confirmchannel

它使用回调 #waitForConfirms(function(err) {...}),当所有发布的消息都已确认时触发。