Estoy usando Django y apio y estoy intentando configurar el enrutamiento en varias colas. Cuando especifico una tarea como routing_key
y exchange
(en el decorador de tareas o usando apply_async()
), la tarea no se agrega al intermediario (que es Kombu que se conecta a mi base de datos MySQL).Django y apio: problemas de enrutamiento
Si especifico el nombre de la cola en el decorador de tareas (lo que significa que se ignora la clave de enrutamiento), la tarea funciona bien. Parece ser un problema con la configuración de enrutamiento/intercambio.
¿Alguna idea de cuál podría ser el problema?
Aquí está la configuración:
settings.py
INSTALLED_APPS = (
...
'kombu.transport.django',
'djcelery',
)
BROKER_BACKEND = 'django'
CELERY_DEFAULT_QUEUE = 'default'
CELERY_DEFAULT_EXCHANGE = "tasks"
CELERY_DEFAULT_EXCHANGE_TYPE = "topic"
CELERY_DEFAULT_ROUTING_KEY = "task.default"
CELERY_QUEUES = {
'default': {
'binding_key':'task.#',
},
'i_tasks': {
'binding_key':'important_task.#',
},
}
tasks.py
from celery.task import task
@task(routing_key='important_task.update')
def my_important_task():
try:
...
except Exception as exc:
my_important_task.retry(exc=exc)
iniciar la tarea:
from tasks import my_important_task
my_important_task.delay()
¿Cómo se pasa routing_key ? Con async_apply? – mher
Estoy usando el método 'delay()', que es solo un atajo para 'apply_async()'. Estoy tratando de mantener la especificación 'routing_key' con el método de la tarea (a través del decorador) en lugar de cuando se llama. Intenté pasar la clave usando 'apply_async()' pero estoy obteniendo el mismo problema. –
delay no acepta la palabra clave routing_key. Es una versión simplificada de apply_async, pero no son lo mismo. – mher