2014-09-25 4 views
0

У меня есть приложение для узлов, которое помещает сообщения в очередь с помощью RabbitMQ. Затем у меня есть некоторые работники на питоне, использующие сельдерей. Я хочу, чтобы сельдерей автоматически выполнял какую-то задачу, когда новое сообщение отправляется в эту очередь. Как я могу достичь этого? Любая помощь приветствуется.Как выполнить задачу сельдерея, когда новое сообщение приходит в очередь?

+0

Я также разместил этот вопрос на github : https://github.com/celery/celery/issues/2279 –

ответ

1

Попробуйте это: В узле Ваше сообщение должно иметь следующий формат

var message = { 
      "id": "4cc7438e-afd4-4f8f-a2f3-f46567e7ca77", 
      "task": "task_name", 
      "args": ["this is my arg"], 
      "kwargs": {}, 
      "retries": 0 
      } 

И сельдерея ваша задача должна быть определена следующим образом:

@app.task(serializer='json', name='task_name') 
def task1(arg1): 
    print arg1 

Также не забудьте настроить маршруты в ваш файл конфигурации сельдерея, например:

app.conf.update(
    CELERY_TASK_RESULT_EXPIRES=3600, 
    CELERY_ROUTES = {'tasks.task1': {'queue': 'queue_name'}}, 
    CELERY_ACCEPT_CONTENT = ['application/json'] 
) 
Смежные вопросы