私はDjangoとCeleryを使用していますが、ルーティングを複数のキューに設定しようとしています。タスクrouting_key
とexchange
(タスクデコレータまたはapply_async()
)を指定すると、タスクはブローカー(私のMySQLデータベースに接続しているKombu)に追加されません。Django&Celery - ルーティングの問題
タスクデコレータでキュー名を指定すると(ルーティングキーは無視されます)、タスクは正常に動作します。これはルーティング/交換の設定に問題があるようです。
どのような問題が発生する可能性がありますか?ここで
はセットアップです:
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)
は、タスクを開始します
from tasks import my_important_task
my_important_task.delay()
をあなたはrouting_keyを渡すにはどうすればよいの? async_applyを使用していますか? – mher
私は 'delay()'メソッドを使用しています。これは 'apply_async()'のショートカットです。私は、 'routing_key'仕様を、(デコレータを介して)それが呼び出されたときではなく、タスクメソッドで保持しようとしています。代わりに 'apply_async()'を使ってキーを渡そうとしましたが、私は同じ問題を抱えています。 –
遅延はrouting_keyキーワードを受け入れません。これはapply_asyncの簡略化されたバージョンですが、同じではありません。 – mher