Вопрос

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

Я наткнулся на две LIBS (Resque Node и Node-Worker), но хотел бы знать, есть ли что-то более использованное.

Это было полезно?

Решение

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

Настраивать

Beanstalkd

  1. Установить Beanstalkd. Анкет Другая очередь НО этот поддерживает Отсроченные путы. Анкет Если вы компилируете из источника, это будет немного сложнее, потому что это зависит от либевент(как Memcached). Но опять же, я не думаю, что вы должны скомпилировать его из источника, потому что есть много двоичные пакеты доступный. Например, на Ubuntu вы можете установить Beanstalkd, выпустив команду:

    sudo apt-get install beanstalkd

Узел-Beanstalk-Client

  1. Установите клиентскую библиотеку Beanstalkd. Лучший, что я нашел Узел-Beanstalk-Client. Анкет Потому что в списке клиентских библиотеки Beanstalkd эта библиотека не упоминается/не упоминалась (тогда я снова могу добавить записи в список, поэтому я добавлю это). Причины, по которым я предпочитаю эту библиотеку, по сравнению с другими:

    1. Пакет NPM: Мне нравилось использовать пакет NPM для установки клиентской библиотеки. У других ничего не было.
    2. Активное развитие: Я предпочитаю библиотеки, которые имеют позже/больше коммитов.

Итак, чтобы установить его после установки 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 обработает сообщение.

продюсер.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

Другие советы

я использую Куэ.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top