Задача маршрутизации Python Celery с использованием имени хоста

В настоящее время я использую Celery для управления задачами в своем приложении, и я столкнулся с проблемой распределения задач между конкретными рабочими на основе их уникальных имен хостов. В моем случае я развертываю несколько рабочих контейнеров для конкретного приложения. Эти контейнеры должны подключаться к различным VPN для выполнения определенных запросов или задач обработки.

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

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

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

Сценарий

Рабочие

  • Рабочий01 (имя хоста=a333) подключен к VPN 1
  • Worker02 (hostname=b999) подключен к VPN 2
  • Worker03 (hostname=c777) подключен к VPN 3
  • Worker04 (hostname=c444) подключен к VPN 1

Задачи

  • Задача01 должна выполняться на Worker01|04 (идентифицируется по имени хоста)
  • Задача02 должна выполняться на Worker02 (идентифицируется по имени хоста)
  • Задача03 должна выполняться на Worker01|04 (идентифицируется по имени хоста)
  • Задача04 должна выполняться на Worker03 (идентифицируется по имени хоста)

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

Заранее благодарю за любую помощь!

Вернуться на верх