Итак, я начал использовать RabbitMQ и делал учебные пособия на веб-сайте https://www.rabbitmq.com/tutorials/tutorial-one-javascript.html, но я не на 100% понимал, как можно установить функцию подтверждения, чтобы очередь удаляла сообщение сразу после отправки сообщения, не имеет значения, будет ли сообщение использовано или нет. Я пытаюсь создать очередь, которая удалит все сообщения сразу после отправки
Я попробовал примеры в Учебниках, например, пример hello world показывает, что для свойства noAck установлено значение true, что означает, что мы не подтверждаем сообщения, поэтому Очередь должна фактически удалить эти сообщения после того, как они были отправлены, но это не дело в том, что когда я запускаю send.js 3 раза, а затем запускаю receive.js, тогда я получу 3 раза привет-сообщение, что не то, что я хочу
// this is send.js
var amqp = require('amqplib/callback_api');
amqp.connect('amqp://localhost', function(error0, connection) {
if (error0) {
throw error0;
}
connection.createChannel(function(error1, channel) {
if (error1) {
throw error1;
}
var queue = 'hello';
var msg = 'Hello World!';
channel.assertQueue(queue, {
durable: false
});
channel.sendToQueue(queue, Buffer.from(msg));
console.log(" [x] Sent %s", msg);
});
setTimeout(function() {
connection.close();
process.exit(0);
}, 500);
});
// this is receive .js
var amqp = require('amqplib/callback_api');
amqp.connect('amqp://localhost', function(error0, connection) {
if (error0) {
throw error0;
}
connection.createChannel(function(error1, channel) {
if (error1) {
throw error1;
}
var queue = 'hello';
channel.assertQueue(queue, {
durable: false
});
console.log(" [*] Waiting for messages in %s. To exit press CTRL+C",
queue);
channel.consume(queue, function(msg) {
console.log(" [x] Received %s", msg.content.toString());
}, {
noAck: true
});
});
});
например, если я запускаю 3 раза send.js, возможны 2 случая. Случай 1 заключается в том, что сообщение будет получено от получателя и сделано. case2 заключается в том, что он не будет получен от получателя, и в этом случае я хочу, чтобы он был удален, я не хочу, чтобы сообщение использовалось, если я запускаю receive.js через месяц из send.js, но я также хочу, чтобы моя очередь быть прочным и не эксклюзивным.
Это также будет проблемой, когда я продолжу вызывать send.js, и сообщения будут постоянно помещаться в эту очередь, а затем, если я запущу receive.js, я получу 1000 сообщений одновременно, поэтому моя цель состоит в том, чтобы этого избежать.
Я ценю любую помощь