Я пытаюсь применить некоторый контроль потока в моем приложении, основанном на RabbitMQ.
Очень узкий бриф по моей системе:
- Есть некоторые рабочие, которые сканируюти введите каталог и опубликуйте сообщения для обмена.
- Есть другие работники, которые используют этот обмен (основываясь на ключах маршрутизации) и делают все, что делают с данными, а затем удаляют их.
Данные, которые "хранятся" в обмене, достаточно велики, и время, которое требуется работнику для их просмотра, заметно.Через некоторое время я получаю предупреждение о памяти от RabbitMQ, в котором говорится, что использование памяти слишком велико и все операции публикации остановлены.
Я попытался увеличить объем памяти, используемой Rabbitmq, но это просто откладывает проблемув течение нескольких часов (времени работы).Я также сделал очереди дисковыми, а не оперативными, но мой диск был заполнен.
Поскольку мой ввод не такой большой, я могу жить с "большой" входной очередью, из которой рабочие читаютих вклад.Поэтому я решил попытаться установить «максимальную длину» связи между рабочими и обменом.Я полагаю, что здесь я ничего не потеряю, поскольку реальным узким местом моей системы являются красные рабочие (кстати, я объявил связь между рабочими и обменом с prefech_count=2
).
После всего сказанного ... Мне не удалось применить такую максимальную длину :( Я использую Pika
для объявления своих очередей и работы с каналами. Я прочитал это (https://www.rabbitmq.com/maxlength.html), но не сделал 'Не удалось реализовать это в моем коде, и я хотел бы увидеть пример, использующий этот флаг максимального размера.