27

如何在 node.js 中创建和使用后台作业?

我遇到了两个库(node-resque 和 node-worker),但想知道是否有更多使用的东西。

4

2 回答 2

45

我对此做了一些研究,我会这样做。

设置

豆茎

  1. 安装beantalkd。另一个消息队列,这个支持DELAYED PUTS。如果你从源代码编译它会有点困难,因为它依赖于libevent(如 memcached)。但是话又说回来,我认为您不必从源代码编译它,因为有很多可用的二进制包。例如,在 Ubuntu 上,您可以通过发出以下命令来安装 beanstalkd:

    sudo apt-get install beanstalkd

节点beanstalk客户端

  1. 安装 beanstalkd 客户端库。我发现最好的一个是node-beanstalk-client。因为在 beanstalkd 客户端库列表中没有/没有提到这个库(然后我可以再次将条目添加到列表中,所以我将添加这个)。我更喜欢这个库而不是其他库的原因是:

    1. npm 包:我喜欢使用 npm 包来安装客户端库。其他人没有。
    2. 主动开发:我更喜欢具有较晚/更多提交的库。

因此,要安装它,在安装npm写入方式)后,您只需发出以下命令:

npm install beanstalk_client

代码

消费者.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.jsconsumer.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
于 2011-01-24T13:52:06.030 回答
13

我正在使用Kue

Kue 是一个由 redis 支持的 node.js 的功能丰富的优先级作业队列。Kue 的一个关键特性是其干净的用户界面,用于查看和管理排队、活动、失败和已完成的作业。

于 2013-02-05T21:32:32.520 回答