Rabbitmq 如何使用芹菜节拍与节芹菜

Rabbitmq 如何使用芹菜节拍与节芹菜,rabbitmq,celery,celerybeat,node-celery,Rabbitmq,Celery,Celerybeat,Node Celery,我使用节点芹菜来实现芹菜和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( CE

我使用节点芹菜来实现芹菜和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并在tasks.py中定义我的任务“getOrders”时,它将获取触发器,并进一步命中我请求的url,该url将正常工作

要运行eta.js,请执行以下操作:

 node eta.js
我想要的是,我的任务“getOrders”在每x秒后继续运行。 我读过关于在芹菜中设置周期性任务的内容,但它是在python中,我需要在节点芹菜中使用它

如果可能的话,我想在节点芹菜中使用芹菜节拍,还是应该避免使用节点芹菜?使用芹菜python设置,我知道python,但找不到任何链接来在python中设置芹菜

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


谢谢

您可以直接将计划任务添加到Redis,这样Redbeat将读取这个新任务,并执行它,然后根据crontab设置重新计划它

为此:

  • 在芹菜配置中添加redbead redis url
  • 创建定期任务
  • 将任务存储在redis中,方法是:

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


  • 您可以直接将计划任务添加到Redis,这样Redbeat将读取这个新任务,并执行它,然后根据crontab设置重新计划它

    为此:

  • 在芹菜配置中添加redbead redis url
  • 创建定期任务
  • 将任务存储在redis中,方法是:

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


  • 关于这个的任何更新。我还需要一个类似的系统。你知道怎么做了吗?@shubham003,请查看下面Emilio Camacho的答案。有什么更新吗。我还需要一个类似的系统。“你知道怎么做了吗?”shubham003,请检查下面由Emilio Camacho提供的答案。
    redisClient.zadd("redbeat::schedule", 0, "getOrdersTask")