/ / Come posso eliminare le attività legacy ancora nella coda di Celery / RabbitMQ? - django, rabbitmq, sedano, django-sedano, sedano rapa

Come posso eliminare le attività legacy ancora nella coda di Celery / RabbitMQ? - django, rabbitmq, sedano, django-sedano, sedano rapa

Sto eseguendo Django + Celery + RabbitMQ. Dopo aver modificato alcuni nomi di attività, ho iniziato a ricevere "Attività non registrata" KeyErrors, anche dopo aver rimosso le attività con questa chiave dalla tabella delle attività periodiche in Django Celery Beat e il riavvio del worker di Celery. Essi persistere anche dopo in esecuzione con l'opzione --purge.

Come posso liberarmi di loro?

risposte:

0 per risposta № 1

Per svuotare l'ultima di queste attività, è possibile ri-implementarle con i loro vecchi header di metodo, ma senza logica.

Ad esempio, se hai rimosso il metodo original e ora stanno ottenendo l'errore

[ERROR/MainProcess] Received unregistered task of type u"myapp.tasks.original"

Ricrea semplicemente il original metodo come segue:

tasks.py

@shared_task
def original():
# keep legacy task header so that it is flushed out of queue
# FIXME: this will be removed in the next release
pass

Dopo aver eseguito questa versione in ogni ambiente, tutte le attività rimanenti verranno elaborate (e non fare nulla). Assicurati di averli rimossi dal tuo Compiti periodici tabella e che non vengono più richiamati. È quindi possibile rimuovere il metodo prima della prossima distribuzione e il problema non dovrebbe ripetersi.

Questo è ancora una soluzione, e sarebbe preferibile essere in grado di rivedere ed eliminare individualmente le attività.