Как использовать сельдерей с узлом сельдерея
Я использую ссылку 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.
Сделать это:
- Добавьте RedBad Redis URL в вашем конфигурации сельдерея
- Создать периодическое задание
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,
}
Сохраните задачу в Redis с помощью:
redisClient.hset("redbeat:getOrdersTask", "definition", JSON.stringify(task));
Вставьте задачу в список задач (0 означает, что Redbeat должен выполнить ее немедленно, чтобы она была перенесена в нужное время в соответствии с выбранным периодом конфигурации, для этого случая каждые 5 минут)
redisClient.zadd("redbeat::schedule", 0, "getOrdersTask")