Задача маршрутизации 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, но, похоже, столкнулся с некоторыми проблемами. Несмотря на мои усилия, кажется, что в конфигурации чего-то не хватает.
Заранее благодарю за любую помощь!