Можно ли отбрасывать сообщения rabbitmq, когда очереди слишком велики, используя amqplib в nodejs?
Я использую amqplib
в приложении nodejs. На входной стороне есть некоторая тяжелая обработка, вызывающая некоторую задержку в получении сообщений rabbitmq. При мониторинге моих очередей с rabbitmqctl list_queues
количество сообщений, ожидающих обработки, не перестает расти.
Есть ли способ настроить мой канал так, чтобы отбрасывать сообщения, когда в очереди есть заданное количество ожидающих сообщений?
Ниже показано, как я настраиваю свой канал:
amqp.connect('amqp://localhost')
.then(conn => {
return conn.createChannel();
})
.then(channel => {
channel.assertQueue(q, {durable: false, autoDelete: true});
channel.prefetch(1);
channel.bindQueue(q.queue, topic, 'myroutingkey');
return channel.consume(q, (msg) => {
mycallback(channel, msg);
});
})
.then(() => {})
.catch(err => {});
1 ответ
Решение
Благодаря указанию Йоргена на документ rabbitmq я нашел эквивалент в документе amqplib и могу принудительно установить поведение отбрасывания, добавив maxLength: 1
в мои настройки очереди
channel.assertQueue(q, {durable: false, autoDelete: true, maxLength: 1});