天天看點

celery為不同異步任務配置設定不同worker

背景:

之前所有的異步任務都由統一的一個worker來消費,這樣有個問題,每次更新某個異步任務代碼後,需要重新開機worker,如果有在運作的異步任務,那面重新開機後就暫停了,影響業務。

是以想到把不通的任務配置設定到不通的worker,如果更新某個任務代碼,重新開機對應worker即可,不會影響其他業務。

開搞

1、配置celery,按正則比對異步任務名,分​配到指定消費隊列

這裡建立4個消費隊列,release,job,sync,celery(預設)

比對到sync_release的任務,會排程到release隊列消費,以此類推,支援正則比對

import re
# specify worker queue
# https://docs.celeryq.dev/en/latest/userguide/routing.html
app.conf.task_routes = ([
    ('cmapp.tasks.sync_release', {'queue': 'release'}),
    (re.compile(r'.*(job*|Cdd*)'), {'queue': 'job'}),
    (re.compile(r'.*(delay*|owncloud*)'), {'queue': 'sync'}),
    (re.compile(r'.*(clean*|keycloak*)'), {'queue': 'celery'}),
],)      

2、啟動消費隊列

-Q指定消費隊列名稱

--hostname配置worker名

[program:q_release]
environment=ENV=production
directory=/opt/mmback
command=/opt/envs/env-mmweb/bin/celery -A mmback worker -l info --concurrency=20 -Q release --hostname=release@%%h
autorestart=true
autostart=true      

繼續閱讀