Максимальная длина очереди обмена RabbitMQ - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь применить некоторый контроль потока в моем приложении, основанном на RabbitMQ.

Очень узкий бриф по моей системе:

  • Есть некоторые рабочие, которые сканируюти введите каталог и опубликуйте сообщения для обмена.
  • Есть другие работники, которые используют этот обмен (основываясь на ключах маршрутизации) и делают все, что делают с данными, а затем удаляют их.

Данные, которые "хранятся" в обмене, достаточно велики, и время, которое требуется работнику для их просмотра, заметно.Через некоторое время я получаю предупреждение о памяти от RabbitMQ, в котором говорится, что использование памяти слишком велико и все операции публикации остановлены.

Я попытался увеличить объем памяти, используемой Rabbitmq, но это просто откладывает проблемув течение нескольких часов (времени работы).Я также сделал очереди дисковыми, а не оперативными, но мой диск был заполнен.

Поскольку мой ввод не такой большой, я могу жить с "большой" входной очередью, из которой рабочие читаютих вклад.Поэтому я решил попытаться установить «максимальную длину» связи между рабочими и обменом.Я полагаю, что здесь я ничего не потеряю, поскольку реальным узким местом моей системы являются красные рабочие (кстати, я объявил связь между рабочими и обменом с prefech_count=2).

После всего сказанного ... Мне не удалось применить такую ​​максимальную длину :( Я использую Pika для объявления своих очередей и работы с каналами. Я прочитал это (https://www.rabbitmq.com/maxlength.html), но не сделал 'Не удалось реализовать это в моем коде, и я хотел бы увидеть пример, использующий этот флаг максимального размера.

1 Ответ

0 голосов
/ 06 февраля 2019

Биржи не хранят сообщения: очереди делают.

Если вы задаете максимальную длину очереди, устанавливая соответствующий arguments в вызове queue_declare(), сообщения, которые ему не подходят, будут удаляться.

Однако издатель сможет публиковать сообщения на бирже, не замечая этого.

Производитель может получить уведомление о том, что они не могут использовать dead-lettering .

Если вам нужна помощь с кодом, включите код в вопрос.

...