2011-01-24 14 views
5

Estoy tratando de usar MongoDB como cola de mensajes para Apio (en una aplicación de Django). Se supone que la versión de desarrollo actual de Aplery (2.2.0rc2) te permite hacer esto, pero parece que no puedo conseguir que ningún empleado elija las tareas que estoy creando.Usando MongoDB como cola de mensajes para Apio

Versiones: apio v2.2.0rc3
mongodb 1.6.5
pymongo 1,9
django-apio 2.2.0rc2

En la configuración de mi, que tengo:

CELERY_RESULT_BACKEND = "mongodb" 
CELERY_MONGODB_BACKEND_SETTINGS = { 
    # Shouldn't need these - defaults are correct. 
    "host": "localhost", 
    "port": 27017, 
    "database": "celery", 
    "taskmeta_collection": "messages", 
} 

BROKER_BACKEND = 'mongodb' 
BROKER_HOST = "localhost" 
BROKER_PORT = 27017 
BROKER_USER = "" 
BROKER_PASSWORD = "" 
BROKER_VHOST = "" 

import djcelery 
djcelery.setup_loader() 

I' he creado un archivo task.py de prueba de la siguiente manera:

from celery.decorators import task 

@task() 
def add(x, y): 
    return x + y 

Si enciendes apicalmente en el fondo, parece comenzar normalmente. Luego, abro un shell python y ejecuto lo siguiente:

>>> from myapp.tasks import add 
>>> result = add.delay(5,5) 
>>> result 
<AsyncResult: 7174368d-288b-4abe-a6d7-aeba987fa886> 
>>> result.ready() 
False 

El problema es que ningún trabajador retoma las tareas. ¿Me estoy perdiendo un escenario o algo así? ¿Cómo apunto apio a la cola de mensajes?

+0

¿La aplicación está en aplicaciones instaladas? ¿Qué es el apio que regresa en sus registros en todo caso? Una razón común por la cual .ready() devolverá False cuando en realidad no debería ser porque las tareas no se reconocen, Celery dirá algo así como "Tarea desconocida ignorada: ...." – Bartek

+0

¿Alguna vez lo hiciste funcionar? Estoy teniendo el mismo problema – Nathan

+0

No lo hice, desafortunadamente. – Joe

Respuesta

0

Recuerda que Kombu funciona solo con mongo 1.3+ porque necesita la funcionalidad findandmodify. Si está en ubuntu, la última versión en el repositorio es la 1.2, que no funciona.

Tal vez también hay que establecer BROKER_VHOST = "nombrebd"

Manténganme si funciona

0

Asegúrese de añadir esto a su configuración, o los trabajadores no pueden encontrar la tarea y fallar silenciosamente

CELERY_IMPORTS = ("namespace",) 
0

Tuve el mismo problema pero cuando me actualicé a apio 2.3.3 todo funcionó como un amuleto.

2

Tuvimos este mismo problema. Si bien el documento dice que todas las tareas deben registrarse en Apio llamando al

import djcelery 
djcelery.setup_loader() 

no funcionaba correctamente. Por lo tanto, todavía utilizamos el

CELERY_IMPORTS = ('YOUR_APP.tasks',) 

configuración en settings.py. Además, asegúrate de reiniciar Apio si agregas una tarea nueva porque Celery tiene que registrar las tareas cuando comienza.

Django, Celerybeat and Celery with MongoDB as the Broker

Cuestiones relacionadas