cómo configurar y ejecutar apio trabajador en sistema remoto

estoy trabajando en apio y utilizando el servidor rabbitmq y creé un proyecto en el proyecto django en un servidor (donde existe la cola de mensajes, la base de datos) y está funcionando bien, también he creado varios trabajadores

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:guest@localhost: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') 

`

pero quiero ejecutar trabajadores desde otro servidor. Por lo tanto, necesito información sobre cómo ejecutar un trabajador en otro sistema cuando me referí a algunos sitios. ¿Está diciendo que necesitamos ejecutar el proyecto django en el sistema remoto? ¿Es necesario?

Aquí está la esencia de la idea:

En la máquina A:

  1. Instala Celery & RabbitMQ.
  2. Configure rabbitmq para que la Máquina B pueda conectarse a él.
  3. Cree my_tasks.py con algunas tareas y ponga algunas tareas en cola.

En la Máquina B:

  1. Instale el apio.
  2. Copie el archivo my_tasks.py de la máquina A a esta máquina.
  3. Ejecutar un trabajador para consumir las tareas.

Tuve el mismo requisito y experimenté con el apio. Es mucho más fácil hacer eso. Escribí una publicación detallada en el blog que hace unos días atrás. Echa un vistazo a cómo enviar tareas a la máquina remota?

Puede utilizar app.send_task() con algo como lo siguiente en su proyecto de 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)) 

Primero, piensa en cómo funciona realmente el apio?

El productor de apio agrega una tarea a la cola con el nombre y otros encabezados importantes para identificar la ubicación de su tarea.

El apio no agrega una función ejecutable completa a MQ.

Entonces, cuando miras al lado del trabajador (consumidor).

El apio obtiene los detalles de la tarea de MQ e intenta ejecutar esto. Para ejecutar esta tarea, debe haber disponible el módulo / archivos / entorno / base de código para ejecutar esta tarea.

Ahora vamos a tu pregunta …

Intenta configurar el trabajador en una máquina separada para que, lógicamente, ejecute una función señalada por la tarea, necesita un entorno de código completo de tareas y debe conectarse (¿De lo contrario, cómo obtendrá las tareas de MQ?) Con su MQ donde viven las tareas.

Básicamente tomaré la respuesta de ChillarAnand. Me gustaría agregar comentarios sobre su respuesta, pero no puedo porque no tengo una reputación de 50.

asi que…

la respuesta a tu pregunta …

Primero le gustaría leer “¿Cómo enviar tareas a la máquina remota?” , como mencionó ChillarAnand .

Ese es un artículo realmente bueno, con un pequeño defecto, como “no tiene ‘@ app.task’ en la función def add (), en el contenido remote.py”, me causó problemas y me confundió como novato al apio .

Y la respuesta a “[Errno 113] No hay ruta al host”. parte,

Supongo … Supongo que tiene un firewall ejecutándose en su servidor rabbitmq, puede querer tener un cheque. La mayoría de las veces, es iptables, pero podría ser otra cosa. Apágalo, o cambia las reglas. Entonces puedes darle otra oportunidad.