Ich versuche, eine Aufgabe aufzurufen und eine Warteschlange für diese Aufgabe zu erstellen, wenn sie nicht existiert, und dann die aufgerufene Aufgabe sofort in diese Warteschlange einzufügen. Ich habe den folgenden Code:
%Vor%Dann habe ich einen benutzerdefinierten Router:
%Vor% Dies erzeugt einen Austausch namens greet.1
und eine Warteschlange namens greet.1
, aber die Warteschlange ist leer. Der Austausch sollte nur greet
genannt werden, der weiß, wie man einen Routing-Schlüssel wie greet.1
an die Warteschlange namens greet.1
weiterleitet.
Irgendwelche Ideen?
Wenn Sie Folgendes tun:
%Vor%Dann nimmt Sellerie Standardwerte aus der Warteschlange "foo" in CELERY_QUEUES, oder wenn es nicht existiert, dann erzeuge es automatisch mit (queue = foo, exchange = foo, routing_key = foo)
Wenn also 'foo' in CELERY_QUEUES nicht existiert, erhalten Sie:
%Vor% Der Produzent wird dann diese Queue deklarieren, aber da Sie den routing_key außer Kraft setzen,
Senden Sie die Nachricht tatsächlich mit routing_key = 'foobar'
Das mag seltsam erscheinen, aber das Verhalten ist tatsächlich nützlich für den Austausch von Themen, wo Sie zu verschiedenen Themen veröffentlichen.
Es ist schwieriger zu tun, was Sie wollen, aber Sie können die Warteschlange selbst erstellen
und deklarieren Sie es, aber das wird mit automatischen Nachrichtenveröffentlichungswiederholungen nicht gut funktionieren.
Es wäre besser, wenn das Warteschlangenargument für apply_async unterstützt
stattdessen eine benutzerdefinierte kombu.Queue
, die sowohl deklariert als auch als Ziel verwendet wird.
Vielleicht könntest du dafür ein Problem bei Ссылка