celery 发送_任务()方法

yjghlzjz  于 2022-09-21  发布在  Redis
关注(0)|答案(1)|浏览(141)

我有我的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 “路由任务”的文档,但我仍然不清楚如何建立这种沟通。

bvn4nwqk

bvn4nwqk1#

您的API端应该包含路由器。我想这不是问题,因为它只是一个任务->队列的Map(也就是将task1发送到queue1)。

换句话说,您的celery_client应该具有如下所示的TASK_ROUTS:

task_routes = {
    'mytasks.some_task': 'queue_1',
    'mytasks.some_other_task': 'queue_2',
}

相关问题