Сельдерей - как использовать несколько очередей? - PullRequest
0 голосов
/ 12 апреля 2019

Я хочу создать несколько очередей для разных задач.Например, emailqueue для отправки электронных писем или pipedrive очередь для синхронизации задач с pipedrive API, поэтому email не нужно ждать, пока все pipedrives синхронизируются, и наоборот.

Я новичокв маршрутизации, и я попробовал два подхода для создания очередей, но ни один из них, похоже, не работает.

  1. Это предпочтительный подход.Я пытался определить очередь внутри @task декоратора

    @task(bind=True,  queue='pipedrivequeue')
    

    def backsync_lead (self, lead_id):

  2. settings.py

    CELERY_ROUTES = { # tried CELERY_TASK_ROUTES too
        'pipedrive.tasks.*': {'queue': 'pipedrivequeue'},
       ...
    }
    

В обоих случаях, когда я запускаю celery worker вручную, я вижу только одну очередь celery по умолчанию.

(project) milano@milano-PC:~/PycharmProjects/project$ celery -A project.celery worker -l info

 -------------- celery@milano-PC v4.2.2 (windowlicker)
---- **** ----- 
--- * ***  * -- Linux-4.15.0-47-generic-x86_64-with-Ubuntu-18.04-bionic 2019-04-12 17:17:05
-- * - **** --- 
- ** ---------- [config]
- ** ---------- .> app:         project:0x7f3b47f66cf8
- ** ---------- .> transport:   redis://localhost:6379//
- ** ---------- .> results:     redis://localhost/
- *** --- * --- .> concurrency: 12 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery


[tasks]
  . project.apps.apis.pipedrive.tasks.backsync_all_stages
  . project.apps.apis.pipedrive.tasks.backsync_lead

Как видно из этой строки:

 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery

Вероятно, существует только одна очередь.Я хочу использовать эту очередь только для задач без указанной очереди.

Знаете ли вы, в чем проблема?

РЕДАКТИРОВАТЬ

   (project) milano@milano-PC:~/PycharmProjects/peoject$ celery inspect active_queues
Error: No nodes replied within time constraint.

1 Ответ

0 голосов
/ 12 апреля 2019

Вам нужно запустить работника с явно названной очередью, тогда django сможет поступить в эту очередь;

celery worker -A project.celery -l info  # Default queue worker
celery worker -A project.celery -l info -Q pipedrivequeue  # pipedrivequeue worker
celery worker -A project.celery -l info -Q testqueue  # testqueue worker
...