如何使用芹菜节拍芹菜

时间:2017-03-16 10:36:41

标签: rabbitmq celery celerybeat node-celery

我正在使用node-celery github link来实现芹菜celery first step以及rabbitmq。

在芹菜中我们定义任务然后我们推动它们。

我在 tasks.py 中定义的任务如下:

import os
import logging
from celery import Celery
import requests

backend = os.getenv('CELERY_BACKEND_URL', 'amqp')
celery = Celery('tasks', backend=backend)

celery.conf.update(
    CELERY_RESULT_SERIALIZER='json',
    CELERY_ENABLE_UTC=True
)

@celery.task
def getOrders():
    requests.get('locahost:4000/getOrders')

我运行的文件触发任务:

eta.js:

  var celery = require('../celery'),
        client = celery.createClient({
            CELERY_BROKER_URL: 'amqp://guest:guest@localhost:5672//'
     });



    client.on('error', function(err) {
        console.log(err);
    });

    client.on('connect', function() {
        client.call('tasks.getOrders', {
            eta: new Date(Date.now() + 15 * 1000) // an hour later
        });
    });

我使用以下命令启动芹菜工作者:

celery worker -A tasks -l info

现在,当我运行eta.js和我的任务' getOrders'在tasks.py内部定义获取触发器,它进一步命中我请求的URL,并且URL完成其工作。

要运行eta.js,我运行:

 node eta.js

我想要的是我的任务' getOrders'每隔x秒后继续运行。 我已经阅读了关于在celery periodic tasks celery中设置周期性任务的内容,但它是在python中,我需要在node-celery中使用它。

如果可能的话,我想在节点芹菜中使用芹菜,或者我应该避免使用节点芹菜吗?并使用celery python setup,我知道python但无法在python中找到任何设置celery的链接。

任何对芹菜有深入了解的人都可以帮助我或指导我学习一些教程。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以将计划的任务直接添加到Redis,以便Redbeat读取此新任务,并执行该任务并根据crontab设置重新计划它。

为此:

  1. 在您的芹菜配置中添加redbead redis网址
  2. 创建定期任务
const task = {
     name : "getOrdersTask",
     task : "tasks.getOrders",
     schedule: {
         "__type__": "crontab",
         minute : "*/5",
         hour : "*",
         day_of_week :
         day_of_month : "*/7"
         month_of_year : "[1-12]"
     },
     args : [],
     enabled : true,
}
  1. 使用以下命令将任务存储在Redis中:

    redisClient.hset("redbeat:getOrdersTask", "definition", JSON.stringify(task));
    
  2. 将任务插入任务列表(0强制Redbeat立即执行它,因此它将根据您选择的时间段配置在适当的时间重新安排时间,在这种情况下,每5分钟一次)

    redisClient.zadd("redbeat::schedule", 0, "getOrdersTask")