Utilizzo Django e Celery e sto provando a configurare il routing su più code. Quando si specifica l'attività routing_key
e exchange
(nel decoratore di attività o utilizzando apply_async()
), l'attività non viene aggiunta al broker (che è Kombu che si connette al mio database MySQL).Django & Celery - Problemi di routing
Se si specifica il nome della coda nel decoratore di attività (che significa che la chiave di instradamento è ignorata), l'attività funziona correttamente. Sembra essere un problema con l'impostazione di routing/scambio.
Qualche idea di quale potrebbe essere il problema?
Ecco il programma di installazione:
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)
Iniziato compito:
from tasks import my_important_task
my_important_task.delay()
Come passate routing_key ? Con async_apply? – mher
Sto usando il metodo 'delay()', che è solo una scorciatoia per 'apply_async()'. Sto cercando di mantenere le specifiche 'routing_key' con il metodo task (tramite il decoratore) invece di quando viene chiamato. Ho provato a passare la chiave usando 'apply_async()', ma ho lo stesso problema. Il ritardo –
non accetta la parola chiave routing_key. È una versione semplificata di apply_async ma non sono la stessa cosa. – mher