Можно ли отбрасывать сообщения 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});
Другие вопросы по тегам