【问题标题】:RabbitMQ Publish to Exchange ConfirmationRabbitMQ 发布到交易所确认
【发布时间】:2018-04-11 16:30:47
【问题描述】:

我想在关闭 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);
    });
}

【问题讨论】:

  • 您使用哪种语言/库?
  • NodeJS 和使用 amqplib 库

标签: callback rabbitmq exchange-server publish producer


【解决方案1】:

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

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

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

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

【讨论】:

  • 我已经看到了,但是就代码而言,我该如何实现呢?这就是让我困惑的地方。
  • 我用显示 API 参考的链接更新了我的答案。希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多