在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,我如何获取和解析响应?
如果你想存储你的任务的结果,你可以使用这个参数。result_backend
或 CELERY_RESULT_BACKEND
取决于你使用的芹菜版本。
配置选项的完整列表可以在这里找到(搜索 result_backend
在本页面)=>。https:/docs.celeryproject.orgenstableuserguideconfiguration.html。
许多选项都可以用来存储结果------。SQL DBs , NoSQL DBs, Elasticsearch, Memcache, Redis, etc,etc
. 根据你的项目栈选择。
谢谢,有助于理解。因此,由于我想进一步处理的答案,我使用的rpc已经定义在配置我在例子中。
我发现有用的是这个例子,因为大多数的python芹菜的例子假设消费者是相同的应用程序,描述了一个Java应用程序的互动 芹菜-Java 因为它提供了一个很好的例子来说明如何从python端请求。
所以我现在的实现是
result = app.signature('tasks', kwargs=self.get_input(), queue=Queue('queue_async', durable=False)).delay().get()
等待并解析结果。