Работа Celery & RabbitMQ в мультитенантной среде - PullRequest
0 голосов
/ 03 октября 2019

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

Идея, которую мы придумали для решения этой проблемы:

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

Мне удалось создать несколько очередей и отправить им задачи с разными приоритетами.

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

Я посмотрел на Queue объект в app.amqp.queues['NAME_OF_QUEUE'] (где app = Celery("my_app")) и не смог найти там ничего (это может быть потому, что он не привязан к Exchange объекту? Но я читал этот сельдерейиспользует очереди напрямую, что означает, что у меня нет Exchange для привязки к нему)

Я хотел бы знать:

как я могу проверить, сколько задач у меня есть в определенной очереди в любой момент времени (динамически)?

будут ли рабочие извлекать из всех очередей одновременно прямо из коробки (при условии, что я настроил их на прослушивание всех 5 очередей)?

есть ли лучший способ сделать это \я должен переосмыслить этот дизайн?

ура :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...