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) {...})
,当所有发布的消息都已确认时触发。
我想 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) {...})
,当所有发布的消息都已确认时触发。