Wenn Sellerie mit Rabbitmq zusammenarbeitet, um asynchrone Aufgaben auszuführen, wird festgestellt, dass die Anzahl der Nachrichten in Rabbitmq ständig zunimmt, diese Nachrichten jedoch tatsächlich von der Aufgabe verarbeitet wurden.
Bei einem Blick auf das Backend, das mit rabbimtq geliefert wird, haben wir festgestellt, dass in Nachrichten in der Warteschlange die Anzahl der „Bereit“- und „Gesamt“-Nachrichten mehr als 5.000 erreicht hat und der Wert für „Unbestätigt“ 0 beträgt. Wenn es jedoch tatsächlich funktioniert, ändert sich der Wert von unacknowledged, wird aber schließlich 0. Es gibt nichts Besonderes an der Konfiguration von Sellerie. Es wird nur der folgende Inhalt festgelegt:
CELERY_IMPORTS = ('testtasks',)
BROKER_URL = '. amqp://guest:guest@localhost:5672//'
CELERY_RESULT_BACKEND = 'amqp://'
Stimmt etwas mit der Konfiguration von Sellerie nicht?
已经解决了,升级了 rabbitmq 到 3.3 以上版本就可以了。
之前用的是 rabbitmq 3.1 的版本,然后 celery 是 3.1 的版本
真正解决问题的方法是,在task里增加一个ignore_result=True属性,如下
@app.task(ignore_result=True)