芹菜消耗send_task响应。

问题描述 投票:0回答:1

在django应用中,我需要调用一个运行在windows服务器上的外部rabbitmq,并在那里使用一些应用程序,其中django应用运行在linux服务器上。

目前我可以通过使用芹菜来添加一个任务到队列中。send_task:

app.send_task('tasks', kwargs=self.get_input(), queue=Queue('queue_async', durable=False))

我的设置是这样的。

CELERY_BROKER_URL = CELERY_CONFIG['broker_url']
BROKER_TRANSPORT_OPTIONS = {"max_retries": 3, "interval_start": 0, "interval_step": 0.2, "interval_max": 0.5}

CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_DEFAULT_QUEUE = 'celery'
CELERY_TASK_RESULT_EXPIRES = 3600
CELERY_RESULT_BACKEND = 'rpc://'
CELERY_CREATE_MISSING_QUEUES = True

我不确定的是,既然send_task只返回一个key,我如何获取和解析响应?

rabbitmq celery amqp django-celery
1个回答
1
投票

如果你想存储你的任务的结果,你可以使用这个参数。result_backendCELERY_RESULT_BACKEND 取决于你使用的芹菜版本。

配置选项的完整列表可以在这里找到(搜索 result_backend 在本页面)=&gt。https:/docs.celeryproject.orgenstableuserguideconfiguration.html。

许多选项都可以用来存储结果------。SQL DBs , NoSQL DBs, Elasticsearch, Memcache, Redis, etc,etc . 根据你的项目栈选择。


0
投票

谢谢,有助于理解。因此,由于我想进一步处理的答案,我使用的rpc已经定义在配置我在例子中。

我发现有用的是这个例子,因为大多数的python芹菜的例子假设消费者是相同的应用程序,描述了一个Java应用程序的互动 芹菜-Java 因为它提供了一个很好的例子来说明如何从python端请求。

所以我现在的实现是

result = app.signature('tasks', kwargs=self.get_input(), queue=Queue('queue_async', durable=False)).delay().get()

等待并解析结果。

© www.soinside.com 2019 - 2024. All rights reserved.