Подтвердить что ты не робот

Node.js рабочие/фоновые процессы

Как создать и использовать фоновые задания в node.js?

Я столкнулся с двумя libs (node -resque и node -worker), но хотел бы знать, есть ли что-то более используемое.

4b9b3361

Ответ 1

Я сделал некоторые исследования по этому вопросу, и я сделал бы это так.

Настройка

beanstalkd

  • Установите beanstalkd. Другая очередь сообщений НО поддерживает DELAYED PUTS. Если вы скомпилируете исходный код, это будет немного сложнее, потому что это зависит от libevent (например, memcached). Но опять же, я не думаю, что вы должны скомпилировать его из источника, потому что существует множество бинарных пакетов. Например, на Ubuntu вы можете установить beanstalkd, выполнив команду:

    sudo apt-get install beanstalkd

node -beanstalk-клиент

  1. Установите клиентскую библиотеку beanstalkd. Самый лучший, который я нашел, был node-beanstalk-client. Поскольку в списке клиентской библиотеки beanstalkd эта библиотека не упоминалась/не упоминалась (тогда снова я могу добавить записи в список, поэтому я добавлю это). Я предпочитаю эту библиотеку другим:

    • пакет Npm. Мне нравилось использовать пакет npm для установки клиентской библиотеки. Другим не было.
    • Активная разработка. Я предпочитаю библиотеки, которые позже/больше совершают транзакции.

Итак, чтобы установить его, после того, как вы установили npm (путь записи), вы просто выполните следующую команду:

npm install beanstalk_client

Код

consumer.js

var client = require('beanstalk_client').Client;

client.connect('127.0.0.1:11300', function(err, conn) {
    var reserve = function() {
        conn.reserve(function(err, job_id, job_json) {
            console.log('got job: ' + job_id);
            console.log('got job data: ' + job_json);
            console.log('module name is ' + JSON.parse(job_json).data.name);
            conn.destroy(job_id, function(err) {
                console.log('destroyed job');
                reserve();
            });
        });
    }

    reserve();
});

Сначала запустите пользователя:

node consumer.js 

Следующий старт producer.js. Пять секунд (задержка, указанная мной) после выполнения producer.js, consumer.js обработает сообщение.

producer.js

var client = require('beanstalk_client').Client;
client.connect('127.0.0.1:11300', function(err, conn) {
    var job_data = {"data": {"name": "node-beanstalk-client"}};
    var priority = 0;
    var delay = 5;
    var timeToRun = 1;
    conn.put(priority, delay, timeToRun, JSON.stringify(job_data), function(err, job_id) {
        console.log('put job: ' + job_id);
        process.exit();
    });
});

чтобы начать только выпуск:

node producer.js

Ответ 2

Я использую Kue.

Kue - это очередь приоритетных заданий для функций node.js, поддерживаемая redis. Ключевой особенностью Kue является его чистый пользовательский интерфейс для просмотра и управления очередными, активными, неудачными и завершенными заданиями.