代码之家  ›  专栏  ›  技术社区  ›  lexma

RabbitMQ发布到Exchange确认

  •  0
  • lexma  · 技术社区  · 6 年前

    在关闭AMQP连接之前,我想返回一个检索确认消息已成功发布到exchange。目前,我正在使用超时功能,以便在关闭连接之前发布消息。这不是正确的方法。是否有人可以帮助检索确认,以便我可以根据成功的发布关闭连接?

    我使用的代码如下:

    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);
        });
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Jesferman    6 年前

    您可以使用名为“Publisher-confirms”的RabbitMQ扩展。以下是更多信息: https://www.rabbitmq.com/confirms.html#publisher-confirms

    消息发布到exchange时不会通知您,但是 发布并路由到所有队列时 : 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) {...}) 当所有已发布的消息都已确认时触发。