我正在使用node-celery github link与rabbitmq一起实施芹菜celery first step。
就像在芹菜中我们定义任务然后我们推动它们。
我在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')
我运行的文件触发任务:
Itajasa:
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并在tasks.py中定义的任务'getOrders'获取触发器并且它进一步命中我请求的URL并且该URL完成其工作。
rhon after.cn rhon:
node eta.js
我想要的是我的任务'getOrders'每隔x秒就会继续运行。我已经阅读过关于在celery periodic tasks celery中设置周期性任务的内容,但它是在python中,我需要在node-celery中使用它。
如果可能的话,我想在节点芹菜中使用芹菜,或者我应该避免使用节点芹菜吗?并使用celery python setup,我知道python但找不到任何在python中设置celery的链接。
任何对芹菜有很好了解的人都可以帮助我或指导我学习一些教程。
谢谢!
您可以直接将计划任务添加到Redis,以便Redbeat将读取此新任务,它将执行它并根据crontab设置重新计划它。
去做这个:
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,
}
redisClient.hset("redbeat:getOrdersTask", "definition", JSON.stringify(task));
redisClient.zadd("redbeat::schedule", 0, "getOrdersTask")