【问题标题】:How to execute celery task when new message arrives to queue?新消息到达队列时如何执行芹菜任务?
【发布时间】:2014-09-25 13:14:03
【问题描述】:
我有一个使用 RabbitMQ 将消息放入队列的节点应用程序。然后我有一些使用 celery 的 python 工人。我希望 celery 在向该队列发布新消息时自动执行某些任务。
我怎样才能做到这一点?任何帮助表示赞赏。
【问题讨论】:
标签:
python
node.js
queue
rabbitmq
celery
【解决方案1】:
试试这个:
在节点中,您的消息应该具有这种格式
var message = {
"id": "4cc7438e-afd4-4f8f-a2f3-f46567e7ca77",
"task": "task_name",
"args": ["this is my arg"],
"kwargs": {},
"retries": 0
}
在 Celery 中,你的任务应该这样定义:
@app.task(serializer='json', name='task_name')
def task1(arg1):
print arg1
另外不要忘记在你的 celery 配置文件中配置路由,例如:
app.conf.update(
CELERY_TASK_RESULT_EXPIRES=3600,
CELERY_ROUTES = {'tasks.task1': {'queue': 'queue_name'}},
CELERY_ACCEPT_CONTENT = ['application/json']
)