Как использовать сельдерей с узлом сельдерея

Я использую ссылку github на языке 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(
    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 секунд. Я читал об установлении периодических задач в сельдерее. Периодические задачи сельдерея, но это в python, и мне это нужно в ноде-сельдерее.

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

Любой, обладающий хорошими знаниями о сельдерее, может помочь мне или направить меня к обучению.

Спасибо!

0 ответов

Вы можете добавить запланированное задание непосредственно в Redis, чтобы Redbeat прочитал это новое задание, выполнил его и перепланировал в соответствии с настройкой crontab.

Сделать это:

  1. Добавьте RedBad Redis URL в вашем конфигурации сельдерея
  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")
    
Другие вопросы по тегам