Я пытаюсь отправить задачу от работника сельдерея на машине A работнику сельдерея на машине B с помощью «имени задачи».
Все задачи определены на машине B, и только одна задача находится на машине A. Я хотел бы передать имя_задачи работнику машины A и выполнить задачу с тем же именем task_name на машине B.
Как мне общаться друг с другом.
Мы сохраняем один и тот же broker_url в обоих воркерах или как?
Я использую Redis в качестве URL-адреса брокера и бэкэнда результата.
(1) вы можете сделать это с отдельными брокерами для машины A и машины B. redis по умолчанию обычно дает вам шестнадцать баз данных, пронумерованных от 0 до 15. Таким образом, вы можете очень легко назначить db 0 для использования брокером для A и назначить db 1 для брокера для B. Затем для отправки задачи от B к A вы можете использовать send_task
:
from celery import Celery
app = Celery('redis://myredis-server:6379/0')
app.send_task('task_name', kwargs = { 'param1': 'value1' })
(2) вы также можете сделать это с одним брокером, если используете отдельные очереди сельдерея.
Итак, я использовал второй метод с одинаковым broker_url на обеих машинах и в разных очередях. Когда я использовал send_task с машины A, это не отразилось на машине B, но это отразилось на машине A, когда я создал новую задачу с тем же именем, что и на машине B. Кроме того, при запуске рабочих отображается ..Info] mingle: ищет соседей ..Info] mingle: в одиночку. Разве это не должно показывать, что есть другой воркер, работающий с тем же самым broker_url?
И первый метод, я использую две разные базы данных, размещенные в разных местах, и не могу понять, как именно они должны использоваться. Если вы можете помочь с этим или порекомендуете мне хороший источник, чтобы посмотреть?
Второй метод сработал как шарм, когда я использовал AMQP вместо Redis.
Спасибо за быстрый ответ. Я попробую то же самое как можно скорее.