我有我的API,一些端点需要将请求转发给celery 。我的想法是让特定的API服务基本上只示例化Celery客户端并使用Send_TASK()方法,并分离使用任务的服务(Worker)。任务定义的代码应位于该辅助服务中。将celery APP(API)和celery 工人基本分离到两个独立的服务。我不想让我的API知道任何celery 任务定义,端点只需要使用celery_client.send_task('some_task', (some_arguments))
。因此,在一个服务上我有我的API,在其他服务/主机上我有celery 代码库,我的celery 工人将在其中执行任务。
我偶然看到了一篇描述我想要做的事情的很棒的文章。https://medium.com/@tanchinhiong/separating-celery-application-and-worker-in-docker-containers-f70fedb1ba6d和本帖子Celery - How to send task from remote machine?
我需要关于如何从API创建任务的路由的帮助?我希望celery_client.send_task()
具有queue=
关键字,但它没有。我需要有2个队列和两个工作人员,将消费这两个队列的内容。
针对我的员工的命令:
celery -A <path_to_my_celery_file>.celery_client worker --loglevel=info -Q queue_1
celery -A <path_to_my_celery_file>.celery_client worker --loglevel=info -Q queue_2
我也访问了celery “路由任务”的文档,但我仍然不清楚如何建立这种沟通。
1条答案
按热度按时间bvn4nwqk1#
您的API端应该包含路由器。我想这不是问题,因为它只是一个任务->队列的Map(也就是将
task1
发送到queue1
)。换句话说,您的
celery_client
应该具有如下所示的TASK_ROUTS: