Подтвердить что ты не робот

Как настроить и запустить работника сельдерея на удаленной системе

Я работаю над сельдереем и использую сервер rabbitmq и создаю проект в проекте django на сервере (там, где есть очередь сообщений, база данных существует), и он работает нормально, я создал нескольких сотрудников также

from kombu import Exchange, Queue
CELERY_CONCURRENCY = 8

CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml']

CELERY_RESULT_BACKEND = 'amqp'
CELERYD_HIJACK_ROOT_LOGGER = True
CELERY_HIJACK_ROOT_LOGGER = True
BROKER_URL = 'amqp://guest:[email protected]:5672//'

CELERY_QUEUES = (
  Queue('default', Exchange('default'), routing_key='default'),
  Queue('q1', Exchange('A'), routing_key='routingKey1'),
  Queue('q2', Exchange('B'), routing_key='routingKey2'),
)
CELERY_ROUTES = {
 'my_taskA': {'queue': 'q1', 'routing_key': 'routingKey1'},
 'my_taskB': {'queue': 'q2', 'routing_key': 'routingKey2'},
}


AMQP_SERVER = "127.0.0.1"
AMQP_PORT = 5672
AMQP_USER = "guest"
AMQP_PASSWORD = "guest"
AMQP_VHOST = "/"`


CELERY_INCLUDE = ('functions')

`

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

4b9b3361

Ответ 1

Вот суть идеи:

На машине A:

  • Установите Celery и RabbitMQ.
  • Настройте rabbitmq, чтобы машина B могла подключиться к нему.
  • Создайте my_tasks.py с некоторыми задачами и поставьте некоторые задачи в очередь.

На машине B:

  • Установить сельдерей.
  • Скопируйте файл my_tasks.py с машины A на этот компьютер.
  • Запустите рабочего для использования задач

У меня было такое же требование, и я экспериментировал с сельдереем. Это намного легче сделать. Несколько дней назад я написал подробное сообщение в блоге. Проверьте как отправить задачи на удаленный компьютер?

Ответ 2

Вы можете использовать app.send_task() с чем-то вроде следующего в проекте django:

from celery import Celery
import my_client_config_module

app = Celery()
app.config_from_object(my_client_config_module)

app.send_task('dotted.path.to.function.on.remote.server.relative.to.worker',
              args=(1, 2))

Ответ 3

Во-первых, подумайте о том, как сельдерей действительно работает?

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

Сельдерей не добавляет в MQ полную исполняемую функцию.

Итак, когда вы смотрите на сторону рабочего (потребителя).

Сельдерей получает детали задания от MQ и пытается запустить это. Для выполнения этой задачи для выполнения этой задачи должен быть доступен модуль/файлы/среда/код базы данных.

Теперь давайте рассмотрим ваш вопрос...

Вы пытаетесь установить рабочего на отдельном компьютере так логически, чтобы выполнить функцию, указанную в задаче, в которой вам нужна полная среда кода задач, и вы должны подключиться (в противном случае, как вы собираетесь получать задания из MQ?) с вашим MQ, где выполняются задачи.

Ответ 4

Если вы хотите, чтобы ваши работники сельдерея работали на другом сервере, но все еще работали с проектом django, вам определенно придется иметь проект django на другом сервере. Если работники сельдерея на удаленном сервере отвечают только за небольшую задачу (т.е. Одно приложение django), вы можете просто уйти от этого, но им все равно потребуется доступ к любым ресурсам, исходному коду и данным, которые они нужно выполнить свою работу.
Действительно, если вы хотите, чтобы два сервера работали над одними и теми же задачами, вам нужно будет использовать простой веб-интерфейс (например, Flask) для связи между серверами (и расширения функциональности вашей очереди). Затем вам нужно будет убедиться, что они оба используют один и тот же источник данных.
Рассмотреть возможность размещения вашей базы данных удаленно или удаленный доступ к базе данных удаленно. В любом случае всем рабочим, работающим на сервере , будет нужен доступ к базе данных и весь исходный код, необходимый для выполнения задачи. Затем вы должны просто предоставить двум серверам общую очередь сообщений.

Ответ 5

В основном я отвечу ChillarAnand. Я хотел бы добавить комментарий к его ответу, но я не могу, потому что у меня нет 50 репутации.

так...

ответ на ваш вопрос...

Сначала вы хотели бы прочитать "как отправлять задания на удаленный компьютер?" , as ChillarAnand.

Это действительно хорошая статья с одним небольшим недостатком, например "не имеет" @app.task в функции def add(), в содержимом remote.py ", это вызвало проблему и смутило меня как новичок в сельдерей.

И ответ на "[Errno 113] Нет пути к хосту. часть,

Я думаю... Я думаю, у вас есть брандмауэр, работающий на вашем сервере rabbitmq, вы можете проверить чек. В большинстве случаев это iptables, но это может быть что-то еще. Выключите его или измените правила. Затем вы можете попробовать еще раз.