Как определить задачу в ноде-сельдерее? - PullRequest
0 голосов
/ 04 сентября 2018

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

const celery = require('node-celery');
let client = celery.createClient({
                CELERY_BROKER_URL: 'amqp://guest:guest@localhost:5672//',
                CELERY_RESULT_BACKEND: 'amqp://'
            });

В приведенном выше коде мне просто требуется node-celery, а затем я создал клиент для amqp. Теперь мне нужно подключить client и затем вызвать мою задачу send_batch_email_using_mailgun с некоторым параметром.

client.on('connect', function() {
            client.call('send_batch_email_using_mailgun', {
                campaign_data: campaign_data,
                subject: subject,
                template: template
            }, {
                eta: new Date(Date.now() + 120000)
            });
        });

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

1 Ответ

0 голосов
/ 24 октября 2018

Вы можете начать с малого и использовать API setInterval () для выполнения запланированного задания.

Допустим, ваша задача - отправить электронное письмо всем пользователям.

Определите это в функции, подобной этой:

function sendScheduledEmails() {
  // Get all the emails
  // Send emails with your provider
}

Проверьте, работает ли он, вызвав func, но просто включив его и запустив сервер один раз:

sendScheduledEmails() 

Когда вы видите, что ваша функция работает, используйте API:

setInterval(sendScheduledEmails, 120000)

Проверьте, выполняет ли ваше приложение заданные интервалы. Как только вы увидите, что он работает, вы можете заглянуть в другие модули и дополнительно настроить его.

Если вы хотите действовать после того, как что-то случится. Допустим, вы хотите отправить электронное письмо после регистрации пользователя.

Затем, когда пользователь регистрируется, вы можете создать событие, подобное этому:

const EventEmitter = require('events');

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();

// User registered
// Redirect to success page

myEmitter.emit('userRegistered');

This will fire an event everytime that action happens, and you can listen to it.

Then in your code you can do:

myEmitter.on('userRegistered', function() {
  setInterval(sendScheduledEmails, 120000)
})
...