Rabbitmq 芹菜消费发送任务响应

Rabbitmq 芹菜消费发送任务响应,rabbitmq,celery,amqp,django-celery,Rabbitmq,Celery,Amqp,Django Celery,在django应用程序中,我需要调用一个外部rabbitmq,该rabbitmq在windows服务器上运行,并使用其中的某个应用程序,django应用程序在linux服务器上运行 目前,我可以使用芹菜发送任务将任务添加到队列中: app.send_task('tasks', kwargs=self.get_input(), queue=Queue('queue_async', durable=False)) 我的设置如下所示: CELERY_BROKER_URL = CELERY_CONFI

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

目前,我可以使用芹菜
发送任务
将任务添加到队列中:

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_任务只返回一个键?

如果要存储任务的结果,可以使用此参数
result_backend
芹菜_result_backend
,具体取决于您使用的芹菜版本

可以在此处找到完整的配置选项列表(在此页面上搜索
result\u backend
)=>


有许多选项可用于存储结果-
SQL数据库、NoSQL数据库、Elasticsearch、Memcache、Redis等
。根据项目堆栈进行选择

谢谢你的理解。因此,因为我想进一步处理答案,所以我使用rpc,正如我在示例中的配置中已经定义的那样

我发现这个示例很有用,因为大多数python芹菜示例都假设消费者是同一个应用程序,它描述了与Java应用程序的交互,因为它提供了一个关于如何从python端请求的好示例

因此,我现在的实施是:

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

等待并解析结果。

您可以在此处查看我的详细答案->使用
rpc
作为后端将任务结果存储在
队列中。这是你想要的功能吗?我想是的。我的目标基本上是从python(运行在ubuntu服务器上)将任务发送到另一个应用程序(运行在windows上的Java)。python任务应该等待响应(同步),然后进一步处理结果并返回给客户机。因此,我认为
rpc
是预期的
result\u backend
设置,还是我错了?好的。我真的不确定。你可以试试看。如果这解决了你的问题,请在这里更新我。是的,我测试了它,它实际上按照预期工作。因此,我假设使用
rpc
是如上所述的正确做法。谢谢你的回答