python rabbitmq celery python-rq

python task queue



Interactuar con la tarea en curso de apio. (1)

Contamos con una arquitectura distribuida basada en rabbitMQ y Celery . Podemos lanzar en paralelo múltiples tareas sin ningún problema. La escalabilidad es buena.

Ahora necesitamos controlar la tarea de forma remota: PAUSA, REANUDAR, CANCELAR. La única solución que encontramos es hacer en la tarea de apio una llamada RPC a otra tarea que responda al comando después de una solicitud de base de datos. La tarea de apio y la tarea de RPC no están en la misma máquina y solo la tarea de RPC tiene acceso a la base de datos.

¿Tiene algún consejo sobre cómo mejorarlo y comunicarse fácilmente con una tarea en curso? Gracias

EDITAR: De hecho, nos gustaría hacer algo como en la imagen de abajo. Es fácil hacer la configuración Blue o la Orange , pero no sabemos cómo hacer ambas cosas simultáneamente. Los trabajadores se están suscribiendo a una Jobs queue común y cada trabajador tiene su propia Admin queue declarada en un intercambio.

EDITAR: SI esto no es posible con Celery , estoy abierto a una solución con otros frameworks como python-rq .


Se parece al Control Bus pattern .

Para una mejor escalabilidad y para reducir la llamada RPC, recomiendo revertir la lógica. El comando PAUSE, RESUME, CANCEL se envía a las tareas de apio a través de un bus de control cuando se produce el cambio de estado. La aplicación Celery almacenará el estado actual de la aplicación Celery en una tienda (podría estar en la memoria, en el sistema de archivos ...). Si se deben mantener los estados de las tareas incluso después de detener / iniciar la aplicación, implicará más trabajo para mantener ambas aplicaciones sincronizadas (por ejemplo, la sincronización en el inicio).