Tôi có hai quy trình celeryd riêng biệt chạy trên máy chủ của mình, được quản lý bởi supervisor
. Chúng được thiết lập để lắng nghe trên hàng đợi riêng biệt như vậy:Hành trình cần tây để xếp hàng cụ thể
[program:celeryd1]
command=/path/to/celeryd --pool=solo --queues=queue1
...
[program:celeryd2]
command=/path/to/celeryd --pool=solo --queues=queue2
...
Và celeryconfig của tôi trông giống như sau:
from celery.schedules import crontab
BROKER_URL = "amqp://guest:[email protected]:5672//"
CELERY_DISABLE_RATE_LIMITS = True
CELERYD_CONCURRENCY = 1
CELERY_IGNORE_RESULT = True
CELERY_DEFAULT_QUEUE = 'default'
CELERY_QUEUES = {
'default': {
"exchange": "default",
"binding_key": "default",
},
'queue1': {
'exchange': 'queue1',
'routing_key': 'queue1',
},
'queue2': {
'exchange': 'queue2',
'routing_key': 'queue2',
},
}
CELERY_IMPORTS = ('tasks',)
CELERYBEAT_SCHEDULE = {
'first-queue': {
'task': 'tasks.sync',
'schedule': crontab(hour=02, minute=00),
'kwargs': {'client': 'client_1'},
'options': {'queue': 'queue1'},
},
'second-queue': {
'task': 'tasks.sync',
'schedule': crontab(hour=02, minute=00),
'kwargs': {'client': 'client_2'},
'options': {'queue': 'queue1'},
},
}
Tất cả tasks.sync
nhiệm vụ phải được chuyển đến một hàng đợi cụ thể (và tiến bộ do đó celeryd). Nhưng khi tôi cố gắng thực hiện nhiệm vụ một cách thủ công với sync.apply_async(kwargs={'client': 'value'}, queue='queue1')
cả nhân viên cần tây đều nhận nhiệm vụ. Làm thế nào tôi có thể làm cho các tuyến đường công việc đến hàng đợi chính xác và chỉ được chạy bởi các công nhân bị ràng buộc vào hàng đợi?