我有一个包含多个任务类型的队列,我需要为特定任务运行worker。 类似于:' celery worker --routing_key task.type1 --app = app'
队列配置:
CELERY_QUEUES = (
Queue('myqueue', routing_key='task.#'),
)
CELERY_DEFAULT_EXCHANGE_TYPE = 'topic'
使用pika任务很容易解决:http://www.rabbitmq.com/tutorials/tutorial-five-python.html但如何用芹菜做?
答案 0 :(得分:3)
Np,您无法将worker绑定到routing_key。
pika也不可能。
在本教程中,worker / consumer将自己的队列绑定到路由键。
您可以使用芹菜轻松复制此绑定。
例如,您可以在celery配置文件中执行此操作:
exchange = Exchange('default', type=topic)
CELERY_QUEUES = (
Queue('all_logs', exchange, routing_key='logs.#'),
Queue('info_logs', exchange, routing_key='logs.info')
)
收到所有日志:
$ celery worker -A receive_logs -Q all_logs
仅接收'info'日志(msg with routing_key = logs.info only)
$ celery worker -A receive_logs -Q info_logs
最后,你已经启动了一个只使用带有特定routing_key的msg的worker,这就是你想要的。
注意:信息日志在队列中都重复:all_logs和Queue:info_logs
您可能会对以下内容感兴趣: http://docs.celeryproject.org/en/latest/configuration.html?highlight=direct#std:setting-CELERY_WORKER_DIRECT