我正在使用 RabbitMQ 来存储和检索数据。我提到了这篇文章。我已将durable
标志设置为 true 并将noAck
标志设置为 false(即使在消费后我也需要将消息存储在队列中)。
我创建了这些场景:
我在消费者关闭状态(非活动)的情况下更新了 3 次库存数据。然后我激活了消费者。它消耗了队列中的所有三个消息。[效果很好。]
现在我再次产生了三条消息(消费者再次处于非活动状态),然后我关闭了 rabbitmq 服务器。当我重新启动服务器并激活消费者时。它似乎没有消耗数据(队列中的消息是否已丢失?)
消费者 :
connection.createChannel(function (error1, channel) {
if (error1) {
throw error1;
}
var queue = "updateStock2";
channel.assertQueue(queue, {
durable: true,
});
console.log(
" [*] Waiting for stockData messages in %s. To exit press CTRL+C",
queue
);
channel.consume(
queue,
function (data) {
stock = JSON.parse(data.content.toString());
console.log(" [x] Received Stock:", stock.name + " : " + stock.value);
},
{
noAck: false,
}
);
制片人:
connection.createChannel(function (error1, channel) {
if (error1) {
throw error1;
}
var queue = "updateStock2";
channel.assertQueue(queue, {
durable: true,
});
channel.sendToQueue(queue, Buffer.from(data));
console.log(" [x] Sent %s", data);
});
setTimeout(function () {
connection.close();
//process.exit(0);
}, 500);});
他们不是很执着吗?如果服务器崩溃,队列中的所有消息都会永远消失?
服务器崩溃时如何检索队列中的数据?
提前致谢。